如何在同一批处理行中添加多个文件

How to add multiple files in this same batch line

此代码用于从 c:\test 目录中删除除“FolderA”之外的所有文件和文件夹

@echo off
pushd "C:\test" || exit /B 1
for /D %%D in ("*") do (
    if /I not "%%~nxD"== "FolderA" rd /S /Q "%%~D"
)
for %%F in ("*") do (
    del "%%~F"
)
popd

万一我想省略一个以上的文件夹,我该如何添加呢?我的意思是删除除 FolderA FolderB 和 Folder C 之外的所有内容(名称可以包含空格)

这行不通

@echo off
pushd "C:\test" || exit /B 1
for /D %%D in ("*") do (
    if /I not "%%~nxD"== "FolderA" "FolderB" "Folder C" rd /S /Q "%%~D"
)
for %%F in ("*") do (
    del "%%~F"
)
popd

如果你在一行中写 if-clauses,你可以产生一个逻辑与:

if /I not "%%~nxD" == "FolderA" if /I not "%%~nxD" == "FolderB" if /I not "%%~nxD" == "FolderC" rd /S /Q "%%~D"

对于一些项目,我可能会使用此代码:

@echo off
pushd "C:\test" || exit /B 1
for /D %%D in ("*") do (
    set "ITEM=%%~nxD"
    cmd /V /D /C echo(!ITEM!| findstr /V /X /I /C:"FolderA" /C:"FolderB" /C:"Folder C" 2> nul && rd /S /Q "%%~D"
)
for %%F in ("*") do (
    del "%%~F"
)
popd

对于许多项目,我会将它们的名称放入文本文件中,每行一个名称,比如 exclude.txt:

FolderA
FolderB
Folder C

然后我将使用此代码:

@echo off
pushd "C:\test" || exit /B 1
for /D %%D in ("*") do (
    set "ITEM=%%~nxD"
cmd /V /D /C echo(!ITEM!| findstr /V /X /I /L /G:"exclude.txt" 2> nul && rd /S /Q "%%~D"
)
for %%F in ("*") do (
    del "%%~F"
)
popd

如果你想避免慢速管道 |,你也可以使用下面的 for 循环方法,它可以避免像 if /I not "%%~nxD"=="FolderA" if /I not "%%~nxD"=="FolderB" if /I not "%%~nxD"=="Folder C" … 这样的长 if 链:

@echo off
pushd "C:\test" || exit /B 1
for /D %%D in ("*") do (
    set "FLAG=#"
    for %%I in ("FolderA" "FolderB" "Folder C") do (
        if /I "%%~nxD"=="%%~I" set "FLAG="
    )
    if defined FLAG rd /S /Q "%%~D"
)
for %%F in ("*") do (
    del "%%~F"
)
popd