我正在尝试使用批处理脚本创建带有日期的文件夹和子文件夹。
我想要在目录中创建一个文件夹November 2018
,并在其中创建另一个名为27-11-2018
的文件夹。
到目前为止,我尝试过的是:
@echo off
set day=%Date:~0,2%
set month=%Date:~3,2%
set year=%Date:~6,4%
echo %day%
echo %month%
echo %year%
if %month%==11 set month-name=November
pause
set folder="%month-name% %year%\%day%-%month%-%year%"
echo %folder%
md %folder%
pause
输出为:
27
11
2018
Press any key to continue . . .
"November 2018\27-11-2018"
The system cannot find the path specified.
Press any key to continue . . .
回显的行正确,并且创建了November 2018
文件夹,但没有创建子文件夹。
我尝试的只是创建November 2018
文件夹,此方法有效,但是显然,这不会创建子文件夹。
我还按照下面的方式用下划线替换了空格,这也起作用,因此似乎是导致问题的空格。
set folder="%month-name%_%year%\%day%-%month%-%year%"
有什么想法吗?我相信必须对此有一个简单的答案。
答案 0 :(得分:1)
要使mkdir一次性创建嵌套文件夹,您需要启用扩展名(应为默认设置),否则请使用setlocal EnableExtensions
。
我建议不要使用取决于区域设置/用户设置的%date%变量。 为此,请使用wmic或PowerShell。
还创建一个MonthName数组,并使用月份作为索引来选择当前月份。
:: Q:\Test\2018\11\27\SO_53497757.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
:: Build MonthName[01..12] array
Set i=100&Set "MonthName= January February March April May June July August September October November December"
Set "MonthName=%MonthName: ="&Set /a i+=1&Set "MonthName[!i:~-2!]=%"
:: Set MonthName
:: get datetime independent of locale/user settings.
for /f "tokens=1-3 delims=.+-" %%A in (
'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set _IsoDT=%%A
Set "yy=%_IsoDT:~0,4%"&Set "MM=%_IsoDT:~4,2%"&Set "dd=%_IsoDT:~6,2%"
set "folder=!MonthName[%MM%]! %yy%\%dd%-%MM%-%yy%"
echo %folder%
md "%folder%"
编辑:或者使用批处理包装的PowerShell 1衬套
powershell -NoP -C "md (get-date).ToString('MMMM yyyy\\dd-MM-yyyy')"
答案 1 :(得分:0)
不要一次创建目录和子目录。首先创建目录,然后在其中创建子目录。
set folder="%month-name% %year%"
echo %folder%
md %folder%
cd %folder%
set folder="%day%-%month%-%year%"
echo %folder%
md %folder%