如何删除无限重复的目录树?


9

在我们的Windows 2003文件服务器之一上,某人或某物设法以某种方式在用户的某些主文件夹中创建了无限重复的目录树,因此无法将其删除。

您结束时会出现以下内容:

D:\Student\2012\user.name\servername\student\2012\user.name\servername\student\2012\...

据我所知,它一直持续不断。

尝试从其所在的系统中删除目录树会导致“删除文件或文件夹时出错:无法删除文件:”。尝试从连接到网络共享的Windows 7系统中删除它会导致“正在使用文件夹”错误。

如果您沿目录树向下导航,最终将到达一个无法打开或删除的目录(如果右键单击,则不会显示任何标准选项),但是,如果您尝试从另一个系统上的共享打开同一目录可以打开它,但是Windows资源管理器变得非常慢。

我试过的建议在这个岗位,以及启动与光盘的Linux服务器,并试图RM -rf目录,既不工作。

这是一个谜。

编辑:我还可以补充一点,可以重命名目录,而不必删除它们。


1
服务器故障上解决了类似问题。
Lilienthal 2015年

Answers:


14

我还拥有一个由Java IDE创建的无限递归文件夹,但无法在Windows资源管理器或cmd提示符下将其删除。

但是,当我安装git时,我也安装了git-bash。在git-bash中,您可以发出以下命令:

rm -rfd recursive_folder_name

它会照顾好它。


重要说明:这可能会花费大量时间...休息一下,吃点东西,喝一杯咖啡,然后让Unix工具完成工作;)令人惊讶的是它起作用了
Antwane

也工作,如果使用基于VMware Linux和安装驱动器(如果它是外部...)
沃尔夫冈·法尔

4

可能有指向某处文件夹的符号链接,很可能是student路径中的第二个文件夹。

尝试执行以下命令:

dir D:\Student\2012\user.name\servername

并查看是否student标记为DIR或SYMLINK / JUNCTION。

例如,这是dir命令的典型输出:

04/24/2012  10:58 PM    <DIR>          .
04/24/2012  10:58 PM    <DIR>          ..
04/24/2012  10:58 PM    <SYMLINKD>     a [h:\a]

您会看到前两个条目被标记为DIR,而第三个条目(指向另一个文件夹的符号链接)被标记为SYMLINKD。在您的情况下(Windows 2003),我认为有JUNCTIONs而不是SYMLINKs。

如果student文件夹是符号链接或连接,请运行以下命令:

cd /d D:\Student\2012\user.name\servername
rmdir student

从而摆脱递归。


这些目录都不是符号链接,我检查了前几对以及“卡住”的“末尾”。
EnglishInfix 2012年

2

在该文件夹中工作的任何人都有可能创建一个从user.name到的循环循环的连接点servername,从而创建一个“无限循环”目录树。

连接是NTFS文件系统的一项功能,可让您创建到目录的符号链接,该目录用作目录的别名。 http://en.wikipedia.org/wiki/NTFS_junction_point

您可以在Wiki页面的“已观察到的影响”部分下看到您描述的问题。

尝试运行此实用程序以列出该服务器下的联结:

http://technet.microsoft.com/zh-cn/sysinternals/bb896768

它还应该使您能够删除连接点。


2

当eclipse创建一个无法删除的深层文件夹树时,我遇到了类似的问题。但是,由于可以移动和重命名文件夹,所以我写了一个批处理文件来工作,它一次就删除了一个文件夹,这行之有效!对于C目录中的FOLDERNAME似乎无限深的文件夹树,即

C:/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/...

批处理文件:

:LoopStart
REN "C:/*FOLDERNAME*" "*TEMPFOLDERNAME*"
MOVE "C:/*TEMPFOLDERNAME*/*FOLDERNAME*" "C:/"
RMDIR /S /Q "C:/*TEMPFOLDERNAME*"
GOTO LoopStart
:LoopEnd

之所以可行,是因为TEMPFOLDERNAME现在是一棵有限长度的树(其中没有任何文件夹),并且每次循环运行时,庞大的FOLDERNAME树都少了一个文件夹,最终通过删除顶部的文件夹到达了底部。



1

使用此脚本解决了我无尽的循环目录:

:LoopStart
takeown /F "c:\temp\Application Data"
Attrib -S -H "c:\temp\Application Data"
REN "C:\temp\Application Data" "5"
takeown /F "c:\temp\5\Application Data"
Attrib -S -H "c:\temp\5\Application Data"
MOVE "c:\temp\5\Application Data" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
GOTO LoopStart
:LoopEnd

0

我有同样的问题。我要删除的文件夹包含一个无穷无尽的同名链接树,每次删除它的尝试都会导致Windows抛出“ File too long ...”错误。无论我尝试包括以上所有方法的命令如何,该命令均失败,因此我在相关文件夹上方的cmd窗口中尝试了Cygwin的“ rm”命令。我输入了“ rm -r -f [文件夹]”,该文件夹被删除,没有任何投诉。

您可以从https://cygwin.com/install.html免费下载Cygwin 。它基本上是Windows的UNIX shell,它包含所有常用命令(例如ls,rm,du和cat),但也有大量的软件包,如果全部下载,将占用大约1GB的空间。我相信默认的下载软件包包括UNIX命令。如果不是,则在有内存的情况下将它们放在“实用程序”捆绑包中。

注意:您不需要在其本机bash shell窗口中运行Cygwin命令。通过将cygwin的“ bin”目录的路径添加到系统PATH环境变量中,可以在cmd窗口中运行它们。在我的情况下,我添加了“ C:\ cygwin64 \ bin”。

我希望这有帮助。


0

我在这里有同样的问题。

在其他帖子中,建议使用MS RoboCopy将空文件夹镜像到通过网络共享的目标文件夹。

在这个正确的时刻,我使用“> nul”来加速运行(确实如此):

“ C:\ TEMP”是一个空文件夹,“ W:\ TMP”是受影响的文件夹:

robocopy / mir c:\ temp \ 127.0.0.1 \ w $ \ tmp> nul


1
欢迎来到超级用户。如果您从其他地方引用解决方案,请附上署名和链接以供进一步阅读。答案旨在作为最终解决方案。如果您仍在尝试此操作,则过早发布。
fixer1234 '16

0

在独立的Windows 10系统上,我也有这个。C:\ User \ Name \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat \ Repeat看似无穷大。

根据OP,我可以使用Windows或命令提示符导航到第50个,然后再继续。我无法删除它,或完全按其描述单击它,等等。

C是我的语言,所以最终我写了一个带有系统调用循环的程序,该程序重复执行直到失败为止。按照JohnO的DOS代码,我创建了一个名为tmp的目录,并将Repeat \ Repeat移至该目录,删除了空的Repeat文件夹,并将tmp \ Repeat移回当前文件夹。一遍又一遍地!

 while (times<2000)
 {
  ChkSystem("move Repeat\\Repeat tmp");
  ChkSystem("rd Repeat");
  ChkSystem("move tmp\\Repeat Repeat");
  ++times;
  printf("Removed %d nested so far.\n", times);
 }

ChkSystem只是运行system()调用并检查返回值,如果失败则停止。

重要的是,它多次失败。我以为我的程序可能没有用,或者毕竟是无限长的时间。但是,我以前在系统调用中遇到过这种情况,事情没有同步,所以我只是再次运行该程序,然后从中断处继续执行,所以不要以为您的程序无法正常工作。总共运行约20次后,它们全部清除了。总共总共大约有1280个文件夹。不知道是什么原因造成的。疯。


0

使用三级循环目录:

:LoopStart
takeown /F "D:\temp\MyApp"
Attrib -S -H "D:\temp\MyApp"
REN "D:\temp\MyApp" "5"
takeown /F "D:\temp\5\MqttObserver"
Attrib -S -H "D:\temp\5\MqttObserver"
REN "D:\temp\5\MqttObserver" "6"
takeown /F "D:\temp\5\6\PackageFiles"
Attrib -S -H "D:\temp\5\6\PackageFiles"
REN "D:\temp\5\6\PackageFiles" "7"
MOVE "c:\temp\5" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
MOVE "c:\temp\6" "C:\temp"
Del /F /S /Q c:\temp\6\*.*
RMDIR /S /Q "C:\temp\6"
MOVE "c:\temp\7" "C:\temp"
Del /F /S /Q c:\temp\7\*.*
RMDIR /S /Q "C:\temp\7"
GOTO LoopStart
:LoopEnd

解释和代码一起?<:: ;; :: ;; :: ;; :: ;;::( | XXXX |)O〜
皮条客果汁IT

0

我通过通过管理控制台运行chkdsk / f来解决此问题,重新启动后使用文件资源管理器删除。尽管Windows抱怨长文件/文件夹之类的东西,但是一旦我确认要删除,它就摆脱了有问题的递归文件夹。

不知道是否可能使用Windows 7 Pro文件系统中的旧chkdsk选项创建了其他问题。


0

对我来说,Windows RoboCopy方法的这种变体有效:

mkdir c:\empty
robocopy c:\empty toolongdir /purge
rmdir c:\empty
rmdir toolongdir

是的,这需要时间,但可以完成工作。


-1

只需按以下方式运行MS ROBOCOPY:

  1. 创建一个“空文件夹”,其名称与包含“无限重复目录树”的文件夹的名称相同。
  2. 使用/ MIR选项从命令行运行ROBOCOPY。
  3. ROBOCOPY结束后(可能需要几秒钟),
  4. 删除带有“无限重复目录树”的文件夹,该文件夹现在是“空文件夹”。
  5. 同样,继续删除在步骤1中创建的“空文件夹”。

。。。。。。。。。。。。。。。

ROBOCOPY“ C:\ anyplace \ BADFOLDER”“ C:\ wherever \ BADFOLDER” / MIR

哪里:

C:\ anyplace \ BADFOLDER ..是您创建的“空文件夹”,并且

C:\ wherever \ BADFOLDER ..是“无限重复目录树”所在的文件夹。

。。。。。。。。。。。。。。。

ROBOCOPY运行之后..现在,您有两个“空” BADFOLDERS。

要清理,请同时删除

C:\ anyplace \ BADFOLDER和C:\ wherever \ BADFOLDER

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.