【发布时间】:2017-10-26 18:40:08
【问题描述】:
目的是删除所有文件夹(及其子文件夹),但名称列在文本文件中的文件夹除外。
文本文件为"F:\Documents\Batch\my folders.txt",内容为
ABC
DEF
要删除的文件夹位于"F:\Documents\Batch\Practice folder"。它包含以下文件夹:ABC、DEF、GHI 和 JKL。
运行我的批处理文件后,应仅保留 ABC 和 DEF,并删除所有其他文件夹(GHI、JKL)
这是我尝试过的:
@echo off
set WORKDIR="F:\Documents\Batch\Practice folder"
set LISTFILES="F:\Documents\Batch\my folders.txt"
pushd %WORKDIR%
for /d %%G in (*) do (
for /f "tokens=* usebackq" %%H in (%LISTFILES%) do (
if %%G==%%H rd /s /q "%%G"
)
)
popd
请帮助我找到更有效和/或更短的方法来做到这一点。
编辑 1:
该代码将删除与LISTFILES 中的名称匹配的所有文件夹。但是当我做任何事情时:
if not %%G==%%H rd /s /q "%%G"
if not [%%G]==[%%H] rd /s /q "%%G"
if not "%%G"=="%%H" rd /s /q "%%G"
无论有没有/i(即if /i),所有文件夹都会被删除。
所以,我尝试了这个,它工作了
@echo off
setlocal enableDelayedExpansion
set WORKDIR="D:\IFX\services\4"
set LISTFILES="D:\IFX\services\files.txt"
set delete=
pushd %WORKDIR%
for /d %%G in (*) do (
set delete=1
for /f "tokens=* usebackq" %%H in (%LISTFILES%) do (
if /i %%G equ %%H set delete=0
)
if !delete!==1 rd /s /q %%G
)
popd
【问题讨论】:
-
每个文件夹是否在文本文件中单独列出?
-
是的@Squashman,
-
使用 find 或 findstr 查看文件夹名称是否在您的文件列表中。
标签: batch-file