嵌套for循环和循环子文件夹,这是合法的吗? .bat脚本

时间:2015-01-13 14:33:31

标签: batch-file

我试图了解.bat文件,我正在尝试修改脚本,以便它可以遍历目录中的每个子文件夹并删除每个文件夹中的某些文件类型。

以下是我目前所拥有的一个想法,我想知道这样做是否合法:

*Creates "deletethese.txt" via sql command*
FOR /F "tokens=1 delims=," %%v IN (deletethese.txt) DO (
    For /R C:\Users\Public\Documents\ %%G IN (%%V) DO ECHO Deleting File %%G
    For /R C:\Users\Public\Documents\ %%G IN (%%V) DO DEL "%%G"
)

基本上它是从sql命令生成它生成的txt文件并循环遍历它并获取它的内容。我需要这个脚本遍历目录中的每个子文件夹并检查这些内容是否存在,如果存在,则回显该变量,然后删除该内容。另外,我是否需要“%% G IN(%% V)”或者我可以省略参数并使用%% V。

我不确定这是否是解决这个问题的最佳方式,或者我是否在正确的轨道上,这就是我在这里的原因。

感谢您的帮助!非常感谢!

2 个答案:

答案 0 :(得分:1)

  

我需要这个脚本遍历目录中的每个子文件夹,并检查这些内容是否存在,如果存在,请回显该变量,然后删除该内容。

据我了解,您只需确认文件夹(deletethese.txt)中存在C:\Users\Public\Documents中指定的文件名,如果存在,请将其删除。

在这种情况下,您可以使用以下FOR循环完成此操作:

*Creates "deletethese.txt" via sql command*
SET "PathToCheck=C:\Users\Public\Documents"
FOR /F "tokens=1 delims=," %%v IN (deletethese.txt) DO (
    REM Verify file exists before attempting to delete.
    IF EXIST "%PathToCheck%\%%v" (
        ECHO Deleting File %%v
        DEL "%PathToCheck%\%%v"
    )
)

但是,如果您需要在指定的文件夹中找到指定名称​​的文件,则可以执行以下操作:

*Creates "deletethese.txt" via sql command*
SET "PathToCheck=C:\Users\Public\Documents"
FOR /F "tokens=1 delims=," %%v IN (deletethese.txt) DO (
    REM Locate all files with the name within the path.
    FOR /F "usebackq tokens=* delims=" %%A IN (`DIR "%PathToCheck%\%%v" /B /S /A:-D`) DO (
        ECHO Deleting File %%A
        DEL "%%A"
    )
)

答案 1 :(得分:1)

实际上,您的原始代码几乎是正确的。

对于你的情况中的元变量(循环控制变量)%% v / V,除了之外,批处理对字符大小写很不敏感。

所以你需要做的就是让你的%%v完全相同。

作为旁观者,

For /R C:\Users\Public\Documents\ %%G IN (%%V) DO ECHO Deleting File %%G

更好

For /R "C:\Users\Public\Documents\" %%G IN (%%V) DO ECHO Deleting File %%G

因为如果目录名包含 Space 或其他分隔符,引号将需要

并且......你的原件会列出所有文件,然后开始删除它们;

可能更好
For /R C:\Users\Public\Documents\ %%G IN (%%V) DO ECHO Deleting File "%%G"&del "%%G"

其中&是内联语句分隔符。