【发布时间】:2017-10-29 03:22:23
【问题描述】:
我一直在编写代码以从 .txt 文件中输入的位置删除文件。
@echo off
cd C:\Users\Troy\Desktop\Details
set /p loc=<Location.txt
rd /s /q "%loc%"
echo %loc%
pause
此代码返回以下输出
The directory is not empty.
C:\Users\Troy\Downloads\TV Shows
Press any key to continue ...
现在文件 Location.txt,打开时包含以下内容
C:\Users\Troy\Downloads\TV Shows 与我在第二行(上述输出)中得到的回声输出一致
另请注意,我已将批处理文件保存在 C:\Users\Troy\Desktop
因此,没有理由因为同一位置而产生任何干扰。
奇怪的是,当我从另一个批处理文件在同一位置运行以下代码时,它运行得非常好并删除了所有文件。
@echo off
set loc=C:\Users\Troy\Downloads\TV Shows
rd /s /q "%loc%"
echo %loc%
pause
所以这两个代码之间的唯一区别是第一个代码从特定文件设置变量位置,而另一个代码有一个预先输入的变量。
我也尝试使用以下代码从该位置删除文件
@echo off
cd C:\Users\Troy\Desktop\Details
set /p loc=<Location.txt
cd %loc%
del /s /q * >nul 2>&1
cd C:\Users\Troy\Desktop\Details
rd /s /q "%loc%"
echo %loc%
pause
在上面的代码中,delete 命令可以正常工作并删除其中的所有文件。但是文件夹和子文件夹都是剩下的,这意味着rd 命令不起作用
我什至尝试过attrib -h,但这也不起作用。
另请注意,我也尝试过使用rmdir /s /q 的各种排列和组合。但不起作用。
任何帮助表示赞赏。
【问题讨论】:
-
确保目录树是空的,
DIR/B/S/A "%loc%"如果那里有你不希望看到的东西,那么我建议你先在目录上使用更确定的触发ERASE命令;DEL/F/S/Q/A "%loc%\*" -
感谢您的回复。我试着按照你说的做,但结果是一样的。您能否检查一下您的设备是否也会发生这种情况?
-
我很抱歉,但我无意尝试复制我相对一无所知的东西。但是,我以前见过这个问题,但仍然不知道原因。当时的解决方案是再次运行该命令,因此在您的
rd命令之后尝试添加一个新行If Exist "%loc%\" RD/S/Q "%loc%"。不理想,但莫名其妙地知道它可以工作。 -
检查变量定义末尾和
.txt文件内是否存在空格。cd命令比带有结尾空格的rd限制更少。 -
@MCND 谢谢伙计。我整天都在弄清楚代码出了什么问题。但显然位置文件末尾的额外间距是一种威慑。再次感谢,你们真的是天才。
标签: batch-file del rmdir