我正在寻找一种使用脚本压缩特定日期范围内的文件的方法。
例如,我需要将文件压缩到指定的文件夹中,修改日期为 2020。
我尝试了这里建议的解决方案: https://stackoverflow.com/questions/14567022/using-7zip-to-archive-file-by-year
我尝试使用的 .bat 文件的完整代码:
@echo off
set 7z=C:\Program Files\7-Zip\7z.exe
if not exist %7z% set /p 7z="Path to 7-zip executable? "
set /p year="What year do you wish to archive? "
set /p dir="What is the path of the files you wish to archive? "
mkdir "%year%"
rem output of dir is date time am/pm size filename
rem filename = 5th + additional tokens
for /f "tokens=5*" %%I in ('dir "%dir%" ^| find "/%year%"') do move "%dir%\%%I %%J" "%year%"
%7z% a -tzip "%dir%\%year%.zip" "%year%" -mx5
set /p I="I'm about to delete the %year% folder. Hit Ctrl-C if this is a bad idea, or hit Enter to continue."
rmdir /q /s "%year%"
echo Done.
但是当我尝试运行批处理脚本时收到此错误消息:
'zdiryearyear" -mx5' 不被识别为内部或外部命令,可运行程序或批处理文件。
欢迎提出有关如何实现此目的的任何其他建议!
答案1
CMD 语法用于%n
引用参数,例如echo %1 %2
。因此,你应该不是使用以数字开头的变量名,例如7z
。如果你打开,你可以看到问题@echo
。示例来自SS64:
SET 1=Hello
您可能希望创建变量 %1%,但在批处理文件中它将失败。
即使调用脚本时没有传递任何参数 %1,参数也会优先,因此 %1% 会被评估为 %1 加上末尾的额外 %。请记住,命令行仅从左到右解析一次,因此 %1 会被评估前甚至读取了第二个 %。
请注意,这仅适用于 bat 文件,因为它们可以通过参数调用