Batch file 如果文件早于X天->;运行命令--CMD
我正在为在各种Windows Server版本上运行的DriveSnapshot编写脚本。 如果文件夹中有超过6天的文件,我想运行特定的批处理文件(fullbackup)。 如果没有这样的文件->运行差异备份 我试过:Batch file 如果文件早于X天->;运行命令--CMD,batch-file,cmd,forfiles,Batch File,Cmd,Forfiles,我正在为在各种Windows Server版本上运行的DriveSnapshot编写脚本。 如果文件夹中有超过6天的文件,我想运行特定的批处理文件(fullbackup)。 如果没有这样的文件->运行差异备份 我试过: ForFiles /p "path\to\folder" /d -6 /c "cmd /c set var=1" if %var% == 1 ( fullbackup.bat ) else ( diffbackup.bat ) 但是,似乎您不能在for files中
ForFiles /p "path\to\folder" /d -6 /c "cmd /c set var=1"
if %var% == 1 (
fullbackup.bat
) else (
diffbackup.bat
)
但是,似乎您不能在for files
中运行任何命令
似乎变量从未被赋予正确的值
文件的Microsoft文档页面如下所示:
对每个文件运行指定的命令。命令字符串应该用引号括起来*
我知道我的命令会为它找到的每个文件设置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
的
/C
开关后面的命令行没有在主机中运行,实际上您甚至正在显式地创建一个新命令行(通过cmd/C
)
但有一种更简单的方法,即使用for files
的退出代码以及:
forfiles/P“D:\path\to\folder”/D-6>num2>&1&&(
“D:\path\to\fullbackup.bat”
) || (
“D:\path\to\diffbackup.bat”
)
通常我建议使用从批处理文件运行另一个批处理文件,但在本例中,我故意跳过了它,因为调用“fullbackup.bat”
可能会返回批处理文件本身的退出代码,该代码可能会被|
无意中识别
如果您确实需要在有以下其他命令时使用调用
,我将使用此命令:
forfiles/P“D:\path\to\folder”/D-6>num2>&1&&(
调用“D:\path\to\fullbackup.bat”&转到:下一步
) || (
调用“D:\path\to\diffbackup.bat”
)
:下一个
请注意,
forfiles
也会迭代目录,而不仅仅是文件。谢谢!这是我想要的。最后一行:ATM文件夹中要么只有一个文件,要么什么都没有,所以它现在可以工作了。如果是这样,我会对每个子文件夹运行多个检查。谢谢!这种方法同样有效。同时也感谢您将我的问题格式化;)