批处理脚本变量就是这样打印的

时间:2013-04-16 06:34:29

标签: batch-file

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

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%

,我得到的输出如下:

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.

任何人都可以帮忙..

2 个答案:

答案 0 :(得分:3)

数字%变量不应该被%包围,它们只有一个前导%。表达式:

mkdir %1% %TODAY%

有以下要素:

  • mkdir;
  • %1(注意,使用以下%符号);
  • % %(最有可能是空字符串);
  • TODAY( literal 字符串TODAY);和
  • 最后一个裸%(从记忆中,它也会给你一个空字符串)。

您可以在以下脚本中看到:

@echo off
set TODAY=blah
echo mkdir %1% %TODAY%

如果您将其称为myscript.cmd hello,则为您提供:

mkdir helloTODAY

将脚本更改为:

@echo off
set TODAY=blah
echo mkdir %1 %TODAY%

(在%之后立即移除1)会为您提供更多您想要的内容(尽管您的实际代码可能有\分隔路径和目录,而不是根据你的例子的空格):

mkdir hello blah

答案 1 :(得分:0)

关于您的代码的一些观察结果,以及最后的重点。

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

for /f "tokens=2-4 delims=/ " %%a in ("%date%") do ...

tokens=2-4可以访问同一FOR命令中的三条信息,因此无需执行三次:

for /f "tokens=2-4 delims=/ " %%a in ("%date%") do (
   set year=%%c
   set month=%%a
   set day=%%b
)

如果您使用三个先前的变量,其唯一目的是组装TODAY变量,那么变量不是必需的:

for /f "tokens=2-4 delims=/ " %%a in ("%date%") do set TODAY=%%b_%%a_%%c

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

for /f "tokens=2-4 delims=/ " %%a in ("%date%") do mkdir %1 %%b_%%a_%%c

现在重点:

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

for /f "tokens=2-4 delims=/ " %%a in ("%date%") do mkdir "%~1%%b_%%a_%%c"