嵌套for循环和遍历子文件夹,这样合法吗? .bat脚本
Nested for loops and looping through subfolders, is this legal? .bat script
我正在尝试了解 .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.
我不确定这是否是解决此问题的最佳方法,或者我是否走在正确的轨道上,这就是我来这里的原因。
感谢您的帮助!非常感谢!
I need this script to go through each subfolder in the directory and check if those contents exist and if they do, echo that variable and then delete that content.
据我了解,您只需确认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"
)
)
实际上,您的原始代码几乎是正确的。
对于您的案例中的元变量(循环控制变量)%%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"
其中 &
是内联语句分隔符。
我正在尝试了解 .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.
我不确定这是否是解决此问题的最佳方法,或者我是否走在正确的轨道上,这就是我来这里的原因。
感谢您的帮助!非常感谢!
I need this script to go through each subfolder in the directory and check if those contents exist and if they do, echo that variable and then delete that content.
据我了解,您只需确认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"
)
)
实际上,您的原始代码几乎是正确的。
对于您的案例中的元变量(循环控制变量)%%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"
其中 &
是内联语句分隔符。