2013-04-16 79 views
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. 

任何一個可以幫助請..

回答

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% 

(刪除% imm ediately後1)爲您提供了更喜歡你想要的東西(雖然你實際代碼可能有一個\分離的路徑和目錄,而不是按你的例子​​有一個空格):

mkdir hello blah 
+0

嗨,謝謝paxdiablo我一直都是新來編寫批處理腳本。它工作正常。並感謝您的解釋 – Arvind

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 

如果您今天正在使用變量,唯一的目的是創建該文件夾,那麼就沒有必要之一:

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" 
相關問題