我编写了一个创建文件夹的批处理脚本。路径作为输入参数给出,文件夹名称是今天的日期。
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.
任何人都可以帮忙..
答案 0 :(得分:3)
数字%
变量不应该被%
包围,它们只有一个前导%
。表达式:
mkdir %1% %TODAY%
有以下要素:
mkdir
; %1
(注意,不使用以下%
符号); % %
(最有可能是空字符串); 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"