如果文件早于 X 天 -> 运行 命令 -- CMD
If file older than X days -> run command -- CMD
我正在为各种 Windows 服务器版本的 DriveSnapshot 运行 编写脚本。
如果文件夹中有超过 6 天的文件,我想 运行 一个特定的批处理文件(完整备份)。
如果没有这样的文件 -> 运行 差异备份。
我试过了:
ForFiles /p "path\to\folder" /d -6 /c "cmd /c set var=1"
if %var% == 1 (
fullbackup.bat
) else (
diffbackup.bat
)
但似乎你不能 运行 ForFiles
中的任何命令。
似乎变量从未被赋予正确的值。
ForFiles
的 Microsoft 文档页面显示:
Runs the specified command on each file. Command strings should be enclosed in quotation marks.*
我知道我的命令会 set var=1
它找到的每个文件,但应该仍然有效,对吗?
如果有更好的方法解决这个问题,请赐教...
改用 errorlevel
,因为您当前的脚本会在脚本环境之外设置变量,并且它永远不会传回给父脚本。
ForFiles /p "z:\work" /d -100 /c "cmd /c">nul 2>&1
if errorlevel 1 call diffbackup.bat else call fullbackup.bat
forfiles
command are not running in the hosting cmd
instance 的 /C
开关后面的命令行,你实际上甚至明确地创建了一个新的(通过 cmd /C
)。
但是有一个更简单的方法,利用 forfiles
的退出代码和 conditional execution operators &&
and ||
:
forfiles /P "D:\path\to\folder" /D -6 > nul 2>&1 && (
"D:\path\to\fullbackup.bat"
) || (
"D:\path\to\diffbackup.bat"
)
通常我建议使用call
到运行另一个批处理文件,但在这种情况下我故意跳过它,因为call "fullbackup.bat"
可能return 批处理文件本身的退出代码可能会无意中被 ||
.
识别
如果你确实需要使用call
,而后面还有其他命令,我会使用这个:
forfiles /P "D:\path\to\folder" /D -6 > nul 2>&1 && (
call "D:\path\to\fullbackup.bat" & goto :NEXT
) || (
call "D:\path\to\diffbackup.bat"
)
:NEXT
请注意 forfiles
还会遍历目录,而不仅仅是文件。
我正在为各种 Windows 服务器版本的 DriveSnapshot 运行 编写脚本。 如果文件夹中有超过 6 天的文件,我想 运行 一个特定的批处理文件(完整备份)。 如果没有这样的文件 -> 运行 差异备份。
我试过了:
ForFiles /p "path\to\folder" /d -6 /c "cmd /c set var=1"
if %var% == 1 (
fullbackup.bat
) else (
diffbackup.bat
)
但似乎你不能 运行 ForFiles
中的任何命令。
似乎变量从未被赋予正确的值。
ForFiles
的 Microsoft 文档页面显示:
Runs the specified command on each file. Command strings should be enclosed in quotation marks.*
我知道我的命令会 set var=1
它找到的每个文件,但应该仍然有效,对吗?
如果有更好的方法解决这个问题,请赐教...
改用 errorlevel
,因为您当前的脚本会在脚本环境之外设置变量,并且它永远不会传回给父脚本。
ForFiles /p "z:\work" /d -100 /c "cmd /c">nul 2>&1
if errorlevel 1 call diffbackup.bat else call fullbackup.bat
forfiles
command are not running in the hosting cmd
instance 的 /C
开关后面的命令行,你实际上甚至明确地创建了一个新的(通过 cmd /C
)。
但是有一个更简单的方法,利用 forfiles
的退出代码和 conditional execution operators &&
and ||
:
forfiles /P "D:\path\to\folder" /D -6 > nul 2>&1 && (
"D:\path\to\fullbackup.bat"
) || (
"D:\path\to\diffbackup.bat"
)
通常我建议使用call
到运行另一个批处理文件,但在这种情况下我故意跳过它,因为call "fullbackup.bat"
可能return 批处理文件本身的退出代码可能会无意中被 ||
.
如果你确实需要使用call
,而后面还有其他命令,我会使用这个:
forfiles /P "D:\path\to\folder" /D -6 > nul 2>&1 && (
call "D:\path\to\fullbackup.bat" & goto :NEXT
) || (
call "D:\path\to\diffbackup.bat"
)
:NEXT
请注意 forfiles
还会遍历目录,而不仅仅是文件。