我已经写了一个创建文件夹的批处理脚本。路径作为输入参数给出,文件夹名是今天的日期。
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.
有谁能帮帮忙吗?
发布于 2013-04-16 14:40:47
数值型%
变量不应该被%
括起来,它们只有一个前导%
。表达式:
mkdir %1% %TODAY%
具有以下元素:
mkdir
;%1
(注意,不要使用下面的空字符串symbol);% %
(空字符串likely);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
发布于 2013-04-17 01:35:28
关于您的代码的几点观察,以及最后的重要一点。
%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
之间的空格。但是,如果第一个参数中给出的路径可以包含空格,则必须将其括在quotes: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"
https://stackoverflow.com/questions/16030275
复制相似问题