Проблема создания каталога с командным файлом - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь использовать пакетный скрипт для создания папки и подпапки с датами.

Я хочу создать папку в каталоге с именем 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, и это работает, но, очевидно, это не создает подпапку.

I 'Мы также заменили пробел подчеркиванием, как показано ниже, и это тоже работает, поэтому кажется, что это пробел, вызывающий проблему.

set folder="%month-name%_%year%\%day%-%month%-%year%"

Есть идеи?Я уверен, что на это должен быть простой ответ.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Чтобы mkdir создавал вложенные папки за один раз, вам нужно включить расширения (должно быть по умолчанию), в противном случае используйте setlocal EnableExtensions.

Я предлагаю не использовать переменную% date%, которая является locale /пользовательские настройки зависят.Для этого используйте 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 одинлайнер, завернутый в партию

powershell -NoP -C "md (get-date).ToString('MMMM yyyy\\dd-MM-yyyy')"
0 голосов
/ 27 ноября 2018

Не создавайте dir и subdir за один раз.Сначала создайте dir, затем создайте в нем subdir.

set folder="%month-name% %year%"
echo %folder%
md %folder%
cd %folder%
set folder="%day%-%month%-%year%"
echo %folder%
md %folder%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...