首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按如下方式打印批处理脚本变量

按如下方式打印批处理脚本变量
EN

Stack Overflow用户
提问于 2013-04-16 14:34:29
回答 2查看 603关注 0票数 1

我已经写了一个创建文件夹的批处理脚本。路径作为输入参数给出,文件夹名是今天的日期。

代码语言:javascript
运行
复制
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
set TODAY=%day%_%month%_%year%
mkdir %1% %TODAY%

我得到的输出如下:

代码语言:javascript
运行
复制
arvind_test.bat C:\Users\M1015807\Desktop\logs\ C:\Users\M1015807\Desktop\logs\

C:\Users\M1015807\Desktop\zip\test>for /F "tokens=2-4 delims=/ " %a in ('date /T') do set year=%c

C:\Users\M1015807\Desktop\zip\test>set year=2013

C:\Users\M1015807\Desktop\zip\test>for /F "tokens=2-4 delims=/ " %a in ('date /T') do set month=%a

C:\Users\M1015807\Desktop\zip\test>set month=04

C:\Users\M1015807\Desktop\zip\test>for /F "tokens=2-4 delims=/ " %a in ('date /T') do set day=%b

C:\Users\M1015807\Desktop\zip\test>set day=16

C:\Users\M1015807\Desktop\zip\test>set TODAY=16_04_2013

C:\Users\M1015807\Desktop\zip\test>mkdir C:\Users\M1015807\Desktop\logs\TODAY
A subdirectory or file C:\Users\M1015807\Desktop\logs\TODAY already exists.
>> was unexpected at this time.

有谁能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 14:40:47

数值型%变量不应该被%括起来,它们只有一个前导%。表达式:

代码语言:javascript
运行
复制
mkdir %1% %TODAY%

具有以下元素:

  • mkdir;
  • %1 (注意,不要使用下面的空字符串symbol);
  • % % (空字符串likely);
  • TODAY (文字字符串TODAY));并在末尾使用
  • a % % (从内存中也会得到一个空字符串)。

您可以在以下脚本中看到这一点:

代码语言:javascript
运行
复制
@echo off
set TODAY=blah
echo mkdir %1% %TODAY%

如果你把它叫做myscript.cmd hello,它会给你:

代码语言:javascript
运行
复制
mkdir helloTODAY

将脚本更改为:

代码语言:javascript
运行
复制
@echo off
set TODAY=blah
echo mkdir %1 %TODAY%

(在1之后立即删除% )使您更像是您想要的(尽管您的实际代码可能使用\分隔路径和目录,而不是像您的示例那样使用空格):

代码语言:javascript
运行
复制
mkdir hello blah
票数 3
EN

Stack Overflow用户

发布于 2013-04-17 01:35:28

关于您的代码的几点观察,以及最后的重要一点。

%date%变量显示了与date /t命令相同的信息,但前者效率更高。在FOR中执行命令需要一份cmd.exe副本和一个临时文件。变量值的替换是立即进行的:

代码语言:javascript
运行
复制
for /f "tokens=2-4 delims=/ " %%a in ("%date%") do ...

tokens=2-4在同一个FOR命令中提供了对三条信息的访问,因此不需要执行三次:

代码语言:javascript
运行
复制
for /f "tokens=2-4 delims=/ " %%a in ("%date%") do (
   set year=%%c
   set month=%%a
   set day=%%b
)

如果您使用前面的三个变量,唯一的目的是汇编TODAY变量,那么这些变量就不是必需的:

代码语言:javascript
运行
复制
for /f "tokens=2-4 delims=/ " %%a in ("%date%") do set TODAY=%%b_%%a_%%c

如果您使用TODAY变量的唯一目的是创建文件夹,则也没有必要:

代码语言:javascript
运行
复制
for /f "tokens=2-4 delims=/ " %%a in ("%date%") do mkdir %1 %%b_%%a_%%c

现在重要的一点是:

如果文件夹之间用空格分隔,则mkdir命令会创建分隔的文件夹。此命令创建两个文件夹:mkdir one two。您应该消除路径和文件夹名:mkdir %1%%b_%%a_%%c之间的空格。但是,如果第一个参数中给出的路径可以包含空格,则必须将其括在quotes:arvind_test.bat "C:\Users\Joe Doe\M1015807\Desktop\logs"中,但必须按如下方式从参数中删除引号:%~1,并且必须用引号将完整的文件夹名称括起来:

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

https://stackoverflow.com/questions/16030275

复制
相关文章

相似问题

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