定义批处理文件中的变量不起作用

时间:2017-12-21 16:15:01

标签: windows batch-file

我有一个如下所示的批处理文件:

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窗口中单独输入这两个命令时,它似乎工作得很好,但是当放入批处理文件并手动运行时,它不起作用。

3 个答案:

答案 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/yyyydddd, 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)