2014-01-19 56 views
0

我是新手,並創建了一個批處理文件,該文件用用戶輸入的標題創建當前日期文件夾。 不幸的是,它不會創建本月20日的年份。 例如在19日它會創建「140119 - 測試」,但在20日「0120 - 測試」 任何想法是什麼造成它?日期文件夾批處理文件在本月20號不工作?

它一定是導致問題的Delims,但我不知道如何解決它。

@echo off 
@REM Setups %date variable 
@REM First parses day, month, and year into dd , mm, yyyy formats and then combines to be YYMMDD by removing the 20 
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B 
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET dd=%%B 
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET mm=%%B 
FOR /F "TOKENS=2,3 DELIMS=/20 " %%A IN ('echo %CDATE%') DO SET yy=%%B 
SET date=%yy%%mm%%dd% 

call :inputbox "Please enter the folder name (Excl. Date):" "Standard Date folder" 

exit /b 

:InputBox 
set input= 
set heading=%~2 
set message=%~1 
echo wscript.echo inputbox(WScript.Arguments(0),WScript.Arguments(1)) >"%temp%\input.vbs" 
for /f "tokens=* delims=" %%a in ('cscript //nologo "%temp%\input.vbs" "%message%" "%heading%"') do set input=%%a 

if "%input%"=="" (exit /b) 
mkdir "%date% - %input%" 
exit /b 

回答

0

你的根本問題是,delims=短語estalishes一個設置分隔符的,而不是一個分隔符="之間的任何字符都成爲分隔符。

@ECHO OFF 
SETLOCAL 
REM Setups %date variable 
REM First parses day, month, and year into dd , mm, yyyy formats and then combines to be YYMMDD by removing the 20 
FOR /F "TOKENS=1-4 DELIMS=/ " %%A IN ("%date%") DO ECHO A=+%%A+ B=+%%B+ C=+%%C+ D=+%%D+ 
FOR /F "TOKENS=1-4 DELIMS=/ " %%A IN ("%date%") DO SET dd=%%B&SET mm=%%C&SET yyyy=%%D 
SET yy=%yyyy:~-2% 

SET xdate=%yy%%mm%%dd% 
ECHO xdate=%xdate% 

GOTO :EOF 

@echo off關閉命令回顯。執行該指令後,不需要進一步的命令@instruction@只是簡單地關閉那條指令的指令回顯。

你不會告訴我們你的日期格式是什麼,但我的結論是它是dayname dd/mm/yyyy。這是根本 - 我個人使用dd/mm/yyyy但許多Overflowers會使用dayname mm-dd-yyyy。始終是一個問題領域 - 不要讓我們開始時間

%date%是一個魔術變量,由系統根據用戶選擇的格式設置設置爲土豆。同樣,%time%設置爲胡蘿蔔。如果您設置了一個名稱相同的用戶變量,那麼用戶變量將覆蓋系統集變量。

在上面,我用SET yy=%yyyy:~-2%。批量子字符串,您需要SET var=%bigstringname:~start,length%其中length是可選的,如果丟失意味着the remainder of the string after開始.開始may be 0 or positive meaning字符串(或字符位置,開始位置'0')開始後的這個字符數。如果是負數,則表示this number of characters from the end of the string

0

結果取決於你的系統語言環境:

 
C:\Users\User\TEST>date /t 
20/01/2014 

C:\Users\User\TEST>for /f "tokens=1-3delims=/ " %a in ('date /t') do @echo(%c%b%a 
20140120 

C:\Users\User\TEST>for /f "tokens=1-3delims=/ " %a in ('date /t') do @set "mydate=%c%b%a" 

C:\Users\User\TEST>echo %mydate% 
20140120 

C:\Users\User\TEST>set "mydate=%mydate:~2%" 

C:\Users\User\TEST>echo %mydate% 
140120 

請注意尾隨空格:20/01/2014_。您不應該使用系統變量作爲局部變量,例如date

+0

好的我明白了,但我怎樣才能得到2位數的年份。即140120? – user3213256

+0

@ user3213256增強了我的答案。 – Endoro

0

如果這是您的選擇,那麼此代碼將使用WMIC爲您提供XP Pro及更高版本中可靠的YY DD MM YYYY HH Min Sec變量。

@echo off 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 

set "datestamp=%YY%%MM%%DD%" 
相關問題