我有这个简单的批处理代码来检查子文件夹上的修改日期(特别是回收站) . 当在命令提示符中手动输入而不是批处理时,此搜索可以完美地运行 .
并使用相同的确切代码来检查其他文件夹它工作得很好 . 救命?
码:
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
)
1 回答
这不是批量工作的原因是使用
SET
命令的IF
语句的一个令人烦恼的功能 . 正如This Post所述 - “cmd
在解析命令时扩展变量,而不是在它们运行时扩展变量 . 在这种情况下,带有块( ... )
(或实际上任何块)的if
或for
语句恰好是单个命令 . 所以当你在一个块中设置变量并尝试在同一个块中使用它们,不再有变量 - 它们被块甚至执行之前变量所具有的值所取代 . - Joey要解决这个问题,你可以简单地将你的代码块放在
IF
语句中,而是使用ELSE
并让它goto
和:EOF
Option 1: - 避免
IF
语句W / H代码块如果您希望在
IF
语句中使用块,则需要在脚本顶部使用setlocal enabledelayedexpansion
. 此外,要回显或读取括号,您必须使用!{File}!
而不是%{File}%
.Option 2: - 正确扩展
IF
语句W / H代码块