windows@目录删不掉@空白名字的目录删不掉

abstract

  • 在Windows操作系统中,如果遇到无法删除目录的情况,通常是因为以下几个原因:

    1. 文件或目录正在被使用

      • 有应用程序、进程或服务正在打开并使用该目录下的某个文件,这时需要关闭相关程序,确保没有任何进程占用文件或目录。

      解决方案:可以通过任务管理器(Ctrl + Shift + Esc)查看并结束占用文件的进程,或者重启电脑后在启动前尝试删除。

    2. 权限不足

      • 当前账户没有足够的权限删除该目录,尤其是涉及系统保护的目录或者由管理员账号创建的文件。

      解决方案:右键点击文件或目录,选择“属性”,在“安全”选项卡中更改权限,赋予当前用户删除权限;或者以管理员身份运行命令提示符(右键选择“以管理员身份运行”)并在命令行中尝试删除。

    3. 系统文件或受保护的文件夹

      • 有些系统关键文件夹或系统保留的文件夹不允许直接删除。

      解决方案:除非明确知道如何安全地删除这些文件夹,否则不建议直接删除。对于像System Volume Information这样的系统文件夹,通常需要特殊权限操作,并且非必要情况下不应删除。

    4. 文件名包含特殊字符或过长

      • 文件名中含有非法字符或者长度超过限制,可能导致无法删除。

      解决方案:通过命令提示符(CMD)使用 rmdir /s /q 路径del /f /q 文件名 删除(替换路径或文件名为实际值),其中 /s 参数用于递归删除子目录,/q 参数表示安静模式无需确认。

    5. 文件系统错误或磁盘错误

      • 文件系统可能存在损坏或错误,导致文件无法删除。

      解决方案:运行磁盘检查(CHKDSK)修复磁盘错误,然后再尝试删除。

    6. 病毒或恶意软件

      • 目录可能被病毒锁定或包含病毒文件。

      解决方案:运行杀毒软件进行全面扫描并清理病毒,之后再尝试删除。

命令行删除目录

cmd

  • 在命令提示符下删除目录的命令格式如下:

    rd /s /q 目录名
    

    其中,/s 表示连同子目录一起删除,/q 表示静默模式,无提示。

    总之,针对不同情况,请按照对应的方法排查和解决问题,确保不会影响系统的稳定性和数据的安全性。

powershell

  • 可以用remove-item删除文件或目录,使用-r选项可以递归删除目录

windows空白目录或文件

  • 通常文件或目录的名字是非空的,或者通常带有可见字符

  • 如果直接创建空目录(文件)或者只有空格的目录(文件)会失败

  • 不仅是命令行中这么做会失败

    • 创建目录

      PS[BAT:76%][MEM:30.25% (9.59/31.70)GB][9:06:08]
      # [~\Desktop]
       mkdir ''
      mkdir: Cannot bind argument to parameter 'Path' because it is an empty string.
      
      PS[BAT:76%][MEM:30.28% (9.60/31.70)GB][9:06:13]
      # [~\Desktop]
       mkdir ' '
      New-Item: An item with the specified name C:\Users\cxxu\Desktop already exists.
      
    • 创建文件

      PS[BAT:76%][MEM:30.19% (9.57/31.70)GB][9:06:35]
      # [~\Desktop]
       new-item -ItemType File -Path ''
      New-Item: Cannot bind argument to parameter 'Path' because it is an empty string.
      
      PS[BAT:76%][MEM:30.33% (9.61/31.70)GB][9:08:29]
      # [~\Desktop]
       new-item -ItemType File -Path '    '
      New-Item: Access to the path 'C:\Users\cxxu\Desktop' is denied.
      

小结

  • 因为空白的名字不便于人类直观的辨认出来文件,而且可能会导致软件无法正确识别和操作这类目录或文件,导致错误和异常发生
  • 因此windows通常会静止用户的这类行为
  • 但是空白名字的目录在windows并非在所有版本都不可能产生,在一些异常的操作下(可能是意外)

linux空白目录或文件

  • 与windows类似的,linux系统下创建空名字目录或者文件是无法执行的

    • # cxxu @ ubt22 in ~ [1:55:31] C:130
      $ touch ''
      touch: cannot touch '': No such file or directory
      
      # cxxu @ ubt22 in ~ [1:55:35] C:1
      $ mkdir ''
      mkdir: cannot create directory ‘’: No such file or directory
      
  • 然而linux下允许创建尽包含空白字符(空格)的文件或目录

    • # cxxu @ ubt22 in ~ [1:52:45]
      $ touch ' '
      
      # cxxu @ ubt22 in ~ [1:52:49]
      $ ls
      ' '        demo.txt.bak       install.sh   Miniconda3-py312_24.3.0-0-Linux-x86_64.sh
       demodir   gitee_install.sh   miniconda3
      
      
      
      # cxxu @ ubt22 in ~ [1:52:50]
      $ mkdir '   '
      
      # cxxu @ ubt22 in ~ [1:53:02]
      $ ls
      ' '     demodir        gitee_install.sh   miniconda3
      '   '   demo.txt.bak   install.sh
      
  • 在Linux系统中,可以创建只有空格构成的名字的文件或目录,但是不可以创建完全空名字的文件或目录

    文件名是文件和目录在文件系统中的标识,它们需要具有一定的唯一性和可识别性。因此,Linux系统不允许创建完全空名字的文件或目录,因为这会导致系统无法正确地标识和访问这些文件或目录。

    然而,Linux系统允许文件名中包含空格。因此,你可以创建一个只包含空格的文件名或目录名。但是,在创建或引用这样的文件或目录时,你需要使用引号或转义字符来确保空格被正确地处理。例如,你可以使用touch " "命令来创建一个只包含空格的文件名,或者使用ls " "命令来列出这个文件。

    需要注意的是,虽然Linux系统允许文件名中包含空格,但这可能会导致一些不便。例如,在处理文件名时,你可能需要特别注意空格的存在,并确保在引用文件名时使用正确的方法。因此,为了避免潜在的混淆和错误,建议尽量避免在文件名中使用空格。

windows产生空白名字的文件(夹)的可能原因

  • 如果你的windows版本支持wsl 并且安装和使用了wsl

  • 那么在wsl中可以创建仅有空格的目录或文件

  • 而且这些文件在windows系统中也可以看到(比如创建的目录名为' ',这是包含2个空格的目录)

  • 假设创建位置在桌面上,那么windows系统也能够看到这个空目录

  • 假设当前windows用户名为cxxu

  • # cxxu @ ColorfulCxxu in ~ [10:01:03]
    $ cd /mnt/c/Users/cxxu/Desktop
    # cxxu @ ColorfulCxxu in /mnt/c/Users/cxxu/Desktop [10:01:19]
    $ ls
    EM.lnk  Math.lnk  Todo.lnk  blogs_home.lnk  desktop.ini  k  scratch@bugs.md
    
    
    # cxxu @ ColorfulCxxu in /mnt/c/Users/cxxu/Desktop [10:01:21]
    $ mkdir '  '
    
    
    # cxxu @ ColorfulCxxu in /mnt/c/Users/cxxu/Desktop [10:01:27]
    $ ls
    '  '      Math.lnk   blogs_home.lnk   k
     EM.lnk   Todo.lnk   desktop.ini      scratch@bugs.md
    
  • 那么您成功在桌面上创建了一个删不掉的文件夹(目录)

相关powershell脚本

  • function Get-ChildItemNameQuatation
    {
        <# 
        .SYNOPSIS
        获取文件或者目录的名称,并添加双引号
        这是因为有时候目录中会出现一些名字奇怪的文件或目录
        他们在资源管理器中对于许多操作有不寻常的行为(比如报错)
    
        虽然在powershell中可以用tab 来补全文件名称,即利用ls来按下tab键,如果文件名称需要加引号,会自动加上引号
        然而这个方法并不可靠,个别情况下提示的文件名会无法被正确解析
        .EXAMPLE
        PS[BAT:76%][MEM:26.72% (8.47/31.70)GB][8:49:01]
        # [~\Downloads]
        Get-ChildItemNameQuatation
    
        NameQuat           FullNameQuat
        --------           ------------
        ' '                "C:\Users\cxxu\Downloads\ "
        'Compressed'       "C:\Users\cxxu\Downloads\Compressed"
        'Documents'        "C:\Users\cxxu\Downloads\Documents"
        'll'               "C:\Users\cxxu\Downloads\ll"
        'Programs'         "C:\Users\cxxu\Downloads\Programs"
        'tldr_en'          "C:\Users\cxxu\Downloads\tldr_en"
        'Video'            "C:\Users\cxxu\Downloads\Video"
        'tldr-book-en.pdf' "C:\Users\cxxu\Downloads\tldr-book-en.pdf"
        #>
        param(
            $Path = '.'
        )
        Get-ChildItem -Path $Path | ^ @{Name = 'NameQuat'; e = { "'$($_.Name)'" } }, @{Name = 'FullNameQuat'; e = { '"' + $_.fullname + '"' } }
    }
    

利用wsl来管理空格构成的目录

  • 如果要删除也不是没有办法,用wsl 来删除就好了

其他方法

  • 或者不想用wsl,那删除起来有点麻烦,即便用解除占用的软件也难以删除它
    • 可以新建一个目录backup_,把存在仅有空白字符的目录(假设名为Origin)的内容移动到backup_目录中,然后删除掉Origin
    • 最后把backup_目录重命名为Origin目录即可
posted @ 2020-12-20 17:22  xuchaoxin1375  阅读(2)  评论(0)    收藏  举报  来源