首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在批处理文件中定义变量不起作用

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

Stack Overflow用户
提问于 2017-12-22 00:15:01
回答 3查看 1.2K关注 0票数 0

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

代码语言:javascript
复制
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窗口中分别输入这两个命令时,它看起来工作得很好,但当放入批处理文件并手动运行时,它就不能工作了。

EN

回答 3

Stack Overflow用户

发布于 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%输出的日期的格式取决于窗口区域设置。并且没有在二手机器上张贴使用过的账号的日期格式。但我认为下面的方法也会更快一点。

代码语言:javascript
复制
for /F "tokens=2-4 delims=/ " %%a in ("%DATE%") do set "newdate=%%c%%a%%b"

我想,对于日期格式为MM/dd/yyyydddd, MM/dd/yyyy的帐户,仅使用字符串替换也适用于您的计算机

代码语言:javascript
复制
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的区域独立解决方案要慢得多。

票数 1
EN

Stack Overflow用户

发布于 2017-12-22 00:18:36

批处理变量需要有%%,而不是只有一个

票数 0
EN

Stack Overflow用户

发布于 2017-12-22 00:25:15

看起来您正在寻找YYMMDD的输出,如果是这样的话,尝试这样做:

代码语言:javascript
复制
For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set newdate=%%c%%a%%b)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47928797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档