1

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

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.

任何人都可以帮助请..

4

2 回答 2

3

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

mkdir %1% %TODAY%

具有以下要素:

  • mkdir;
  • %1(注意,使用以下%符号);
  • % %(最有可能是一个空字符串);
  • TODAY(文字字符串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-16T06:40:46.703 回答
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"
于 2013-04-16T17:35:28.033 回答