2014-01-19 25 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%" 
相关问题