如何在同一批处理行中添加多个文件
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
此代码用于从 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