【问题标题】:Batch Script Doesnt Delete Folders in a Folder .txt File :(批处理脚本不会删除文件夹 .txt 文件中的文件夹 :(
【发布时间】:2014-10-18 14:06:06
【问题描述】:

我的批处理文件的代码是:

for /f "delims=" %%f in (7profiledeletelist.txt) do rd /s /q "%%f"
PAUSE
exit

在“7profiledeletelist.txt”中,有:(将被删除)

C:\Users\1* (I tried *.* it didnt work)
C:\Users\2* (I tried *.* it didnt work)
C:\Users\3* (I tried *.* it didnt work)
C:\Users\4* (I tried *.* it didnt work)
C:\Users\5* (I tried *.* it didnt work)
C:\Users\6* (I tried *.* it didnt work)
C:\Users\7* (I tried *.* it didnt work)
C:\Users\8* (I tried *.* it didnt work)
C:\Users\9* (I tried *.* it didnt work)
C:\Users\M* (I tried *.* it didnt work)
C:\Users\T* (I tried *.* it didnt work)

但是通过这个7profiledeletelist.txt,bat文件不能删除任何东西。如果我删除 * 并且如果我写了确切的名称,它工作得很好。我想删除用户中以 M-T 和 1 到 9 开头的所有文件夹。如何更改“7profiledeletelist.txt”或批处理脚本。批处理脚本中是否有错误的代码?提前谢谢你:(

我们可以将排除文件夹(例如:文件夹 325 和文件夹 265)添加到此批次中,而不是删除吗?

【问题讨论】:

    标签: batch-file cmd command


    【解决方案1】:

    rd 不接受通配符,因此需要将通配符转换为对文件夹的完整引用。使用额外的for

    for /f "delims=" %%f in (7profiledeletelist.txt) do (
        for /d %%a in ("%%f") do rd /s /q "%%~fa"
    )
    

    编辑以适应 cmets。如何排除进程中的文件夹

    (
        cmd /q /c "(for /f "delims=" %%f in (7profiledeletelist.txt) do for /d %%a in ("%%f") do echo(%%~fa)" 
    ) | ( 
        for /f "delims=" %%a in ('findstr /l /v /g:exclude.txt') do @rd /s /q "%%a"
    )
    

    第一个命令将生成所有文件夹的列表,第二个命令将过滤此列表,过滤掉exclude.txt 文件中指示的文件夹。该文件需要为每个排除的文件包含一行。真正的需求将决定行的格式或findstr命令的参数。

    【讨论】:

    • 我们如何在这段代码中添加异常文件夹(不被删除)?例如:文件夹名称:是 235812 和 35284?
    • 首先,在我删除代码中的第二个“echo”后它没有工作:)再次感谢您
    • @serdar,是的,我的错。我忘记删除测试中使用的echo