有人可以解释这个批处理脚本吗

时间:2018-01-20 13:55:46

标签: batch-file cmd scripting

最近,我一直在努力创建自己的批处理命令,让日常事务变得更加容易。我想创建一个脚本来删除Temp文件夹中的所有内容,因为它总是充斥着不必要的文件。我在网上找到了这个代码并且它有效,但我对它的实际意图做了什么感到困惑。我理解它的某些部分,但大多数人让我感到困惑。我知道它正在使用for循环,但这并没有真正告诉我很多。我在逻辑上知道它是有道理的,但我觉得文档并不清楚整个脚本在做什么。无论如何,这是脚本:

set folder="C:\Users\%USERNAME%\AppData\Local\Temp"
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

好的,所以前两行非常简单。它只是将一个变量设置为文件夹路径,然后将CD设置到该文件夹​​中。 The /d flag用于更改驱动器(C:),如果它当前设置为另一个驱动器。

现在,最后一个是a for cycle。它的作用基本上是:对于dir /b中的每个文件,它以裸格式(仅名称)显示当前目录中的所有文件,它执行rmdir,删除目录,或者,如果{ {1}}失败,因为参数不是目录,它只是rmdir。两种情况下的del内容均为:/s/q - 从所有子文件夹中删除/s - 不提示/q

希望我帮忙!

答案 1 :(得分:0)

第一行设置变量folder的值。

第二个将驱动器和目录更改为分配给folder的值。

第三个首先执行当前目录的基本形式(仅名称)的目录列表(刚刚更改),并将结果列表的每一行完整地分配给%%i

然后在%%i安静模式下使用rmdirrd命令以及包括所有子目录的/q删除名称/s。这适用于目录,但不适用于文件。 ||再次调用del命令/s /q,其含义相同,del删除文件。

因此,删除了作为目录的任何名称,如果它是文件,则rmdir会失败,因此del会将其删除。

引号用于确保遇到包含空格或逗号分隔符的任何名称。