我有一个如下所示的批处理文件:
For /f "tokens=2-4 delims=/ " %a in ('date /t') do (set newdate=%c%a%b)
blat my_file_%newdate% -to test@email.com -f test_email.com
当我在cmd窗口中单独输入这两个命令时,它似乎工作得很好,但是当放入批处理文件并手动运行时,它不起作用。
答案 0 :(得分:1)
打开命令提示符窗口并运行for /?
。输出是此命令的帮助,其中包含以下信息:
要在批处理程序中使用FOR命令,请指定%%变量而不是
%变量。变量名称区分大小写,因此%i与%I不同。
接下来,我建议运行set /?
,并至少阅读列出环境变量DATE
的输出帮助的最后一页。
如果启用了Command Extensions,那么有几个动态
可以扩展但不显示的环境变量
在SET显示的变量列表中。这些变量值为
每次扩展变量的值时动态计算 如果用户明确定义了具有这些名称之一的变量,则为 该定义将覆盖下面描述的动态定义:%CD% - 扩展到当前目录字符串。
%DATE% - 使用与DATE命令相同的格式扩展到当前日期。
%TIME% - 使用与TIME命令相同的格式扩展到当前时间。
%RANDOM% - 扩展为0到32767之间的随机十进制数。
%ERRORLEVEL% - 扩展到当前的ERRORLEVEL值
%CMDEXTVERSION% - 扩展到当前的命令处理器扩展名 版本号。
%CMDCMDLINE% - 扩展到调用
的原始命令行 命令处理器。%HIGHESTNUMANODENUMBER% - 扩展到最高的NUMA节点号
在这台机器上。
所以可能没有必要在后台运行单独的命令进程,cmd.exe /C
命令行date /T
由 FOR 和发布的命令行完成,捕获输出此命令进程,并按 FOR 逐行处理。
嗯,date /T
或使用%DATE%
输出的日期格式取决于Windows区域设置。并且没有发布使用过的帐户的二手机器上的日期格式。但我认为以下的工作速度也快一点。
for /F "tokens=2-4 delims=/ " %%a in ("%DATE%") do set "newdate=%%c%%a%%b"
我认为只在您的计算机上使用字符串替换也可以使用日期格式为mm/DD/yyyy
或dddd, mm/DD/yyyy
的帐户:
set "newdate=%DATE:~-4%%DATE:~-10,2%%DATE:~-7,2%"
最后一个解决方案比其他解决方案快几毫秒。
还有一个与地区无关的解决方案,例如%date% produces different result in batch file when run from Scheduled Tasks in Server 2016上的答案详细解释。但与使用动态环境变量DATE
相比,使用 WMIC 的区域无关解决方案要慢得多。
答案 1 :(得分:0)
批量变量需要有%%而不是只有一个
答案 2 :(得分:0)
看来您正在寻找输出为YYMMDD,如果是这样,请尝试:
For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set newdate=%%c%%a%%b)