我有这个简单的批处理代码来检查子文件夹(特别是回收站)上的“修改日期”。 在命令提示符中手动输入而不是批量输入时,此搜索可以完美地工作。
并使用相同的确切代码检查其他文件夹,效果很好。帮助吗?
代码:
if exist C:\$Recycle.Bin (
pushd "C:\$Recycle.Bin"
for /F "delims=" %%a in ('dir /S /b S-1-*-1001 /AD') do set {file}=%%a
for %%a in ("%{file}%") do echo Recycle Bin: %%~ta
popd
)
答案 0 :(得分:3)
之所以不能批量运行,是因为IF
命令使用了SET
语句的一个令人讨厌的功能。如This Post所述-“ cmd
在解析命令时而不是在运行时扩展变量。碰巧是if
或for
语句带有块{{ 1}}(或实际上是任何块)在这种情况下都作为单个命令进行计算,因此,当您在块内设置变量并尝试在同一块中使用它们时,就不再有变量了-它们被变量之前的值所取代该块甚至被执行了。” -Joey
要解决此问题,您不能简单地将代码块放在( ... )
语句中,而不能使用IF
并使其ELSE
和goto
选项1:-避免使用:EOF
语句 W / H 代码块
IF
但是,如果您确实希望在@ECHO OFF
Rem | Check If Directory Exists & pushd It.
if exist "C:\$Recycle.Bin" (pushd "C:\$Recycle.Bin") ELSE (goto :EOF)
Rem | Grab data on folders
for /F "delims=" %%a in ('dir /S /b S-1-*-1001 /AD') do (set "{File}=%%a")
Rem | Display data on folders
for %%a in ("%{file}%") do (echo Recycle Bin: %%~ta)
Rem | Un-pushd
popd
pause
goto :EOF
语句中使用一个块,则需要在脚本顶部使用IF
。此外,要回显或读取括号,您将必须在setlocal enabledelayedexpansion
上使用!{File}!
。
选项2:-正确展开%{File}%
语句 W / H 代码块
IF