使用批处理文件创建目录时出现问题

时间:2018-11-27 10:37:34

标签: batch-file

我正在尝试使用批处理脚本创建带有日期的文件夹和子文件夹。

我想要在目录中创建一个文件夹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%"

有什么想法吗?我相信必须对此有一个简单的答案。

2 个答案:

答案 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%