我有一个批处理文件,如下所示:
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窗口中分别输入这两个命令时,它看起来工作得很好,但当放入批处理文件并手动运行时,它就不能工作了。
发布于 2017-12-22 01:32:29
打开命令提示符窗口并运行for /?。输出是此命令的帮助,顶部包含以下信息:
要在批处理程序中使用FOR命令,请改为指定%%variable
所有变量名称区分大小写,因此%I与%i不同。
接下来,我建议运行set /?并至少阅读列出环境变量DATE的输出帮助的最后一页。
如果启用了命令扩展,则有几个动态
可以扩展但不显示的环境变量
在SET显示的变量列表中,这些变量值是
每次扩展变量的值时动态计算。
如果用户显式定义了具有这些名称之一的变量,则
该定义将覆盖下面描述的动态定义:
%CD% -展开为当前目录字符串。
%DATE% -使用与date命令相同的格式扩展到当前日期。
%TIME% -使用与time命令相同的格式扩展到当前时间。
% random % -扩展为0到32767之间的随机十进制数。
%ERRORLEVEL% -扩展到当前ERRORLEVEL值
%CMDEXTVERSION% -扩展到当前命令处理器扩展
这是一个版本号。
%CMDCMDLINE% -扩展到调用的原始命令行
这是一个命令处理器。
%HIGHESTNUMANODENUMBER% -扩展到最高NUMA节点编号
我在这台机器上找到了。
因此,可能不需要像 cmd.exe /C 所做的那样,在后台使用命令行date /T在单独的命令进程中运行,捕获此命令进程的输出,并通过的逐行处理它。
好吧,由date /T或使用%DATE%输出的日期的格式取决于窗口区域设置。并且没有在二手机器上张贴使用过的账号的日期格式。但我认为下面的方法也会更快一点。
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%"最后一个解决方案比其他解决方案快了几微秒。
还有一个区域独立的解决方案,例如在Why does %date% produce a different result in batch file executed as scheduled task?上的答案中详细解释了,但是与使用动态环境变量DATE相比,使用WMIC的区域独立解决方案要慢得多。
发布于 2017-12-22 00:18:36
批处理变量需要有%%,而不是只有一个
发布于 2017-12-22 00:25:15
看起来您正在寻找YYMMDD的输出,如果是这样的话,尝试这样做:
For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set newdate=%%c%%a%%b)https://stackoverflow.com/questions/47928797
复制相似问题