Как создать каталог, который следует за пронумерованной последовательностью? - PullRequest
0 голосов
/ 01 сентября 2011

Я хотел бы написать командный файл, который регистрирует данные.Каждый раз, когда он запускается, он должен регистрировать данные в новом, последовательно пронумерованном каталоге.

Если бы я делал это в BASH, я бы просто сделал:

~/$ for i in {1..25}; do if [[ ! -d log-$i ]]; then mkdir log-$i; break; fi; done; echo "log-$i"
log-1
~/$ for i in {1..25}; do if [[ ! -d log-$i ]]; then mkdir log-$i; break; fi; done; echo "log-$i"
log-2
~/$ for i in {1..25}; do if [[ ! -d log-$i ]]; then mkdir log-$i; break; fi; done; echo "log-$i"
log-3

Что быэквивалент этого в Windows (XP или более поздней) пакетного программирования?

[EDIT]

Это то, что я реализовал, и это не таксделать то, что я надеялся:

set "UNIT_ID=00534"
echo Check Thermo-Cal
IF NOT EXIST "C:\Thermo-Cal\NUL" "md C:\Thermo-Cal"
echo Check Thermo-cal\%UNIT_ID%
IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\NUL" "md C:\Thermo-Cal\%UNIT_ID%"
FOR /L %%F IN (1,1,99) DO (
    IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\log-%%F\NUL"  (
        "md C:\Thermo-Cal\%UNIT_ID%\log-%%F"
        set "LOG_DIR=C:\Thermo-Cal\%UNIT_ID%\log-%%F"
        goto dir_set
    ) 
)
echo "Couldn't create a directory to save stuff."
goto :EOF
:dir_set
echo "Stuff will get saved in: %LOG_DIR%"

Запуск в Windows 7 (cmd) дает:

c:\batch\log-dir.bat
Check Thermo-Cal
The filename, directory name, or volume label syntax is incorrect.
Check Thermo-Cal\00534
The filename, directory name, or volume label syntax is incorrect.
The filename, directory name, or volume label syntax is incorrect.
"Stuff will get saved in: C:\Thermo-Cal\00534\log-1"

При первом запуске пакетного файла log-1 создано.Повторный запуск команды дает точно такие же результаты, я надеюсь, что она создаст log-2.
Отключение @echo off показывает, что цикл никогда не прерывается раньше и выполняется (в данном случае) 99 раз.

Ответы [ 3 ]

1 голос
/ 01 сентября 2011
FOR /L %%F IN (1,1,25) DO (
 IF "condition" "md C:\some\folder\log-%%F"
 ECHO log-%%F
 PAUSE
)

Вставленная пауза, чтобы вы могли видеть каждый выход, прежде чем он перейдет к следующему последовательному номеру. Удалите PAUSE, когда вы завершите свой сценарий.

РЕДАКТИРОВАТЬ: Добавление условия ЕСЛИ НЕ СУЩЕСТВУЕТ

FOR /L %%F IN (1,1,25) DO (
 IF NOT EXIST "C:\some\folder\log-%%F\NUL" "md C:\some\folder\log-%%F"
 ECHO log-%%F
 PAUSE
)

При использовании операторов IF [NOT] EXIST для каталогов вы должны указать. \ NUL как файл, поскольку Windows обычно передает условие только для файлов, а не для папок. А в Windows файл NUL ВСЕГДА существует в существующем каталоге.

EDIT2: создание журнала - %% F доступен вне цикла

FOR /L %%F IN (1,1,25) DO (
 IF NOT EXIST "C:\some\folder\log-%%F\NUL" ("md C:\some\folder\log-%%F" && SET dir%%F=C:\some\folder\log-%%F)
)
ECHO %dir1%
ECHO %dir2%
ECHO %dir3%

Вставьте это в командный файл и попробуйте.

0 голосов
/ 01 сентября 2011

Вы должны быть осторожны, когда используете кавычки, так как в пакетном сценарии содержимое в кавычках можно рассматривать как буквенные строки вместо кода.

set "UNIT_ID=00534"
echo Check Thermo-Cal
IF NOT EXIST "C:\Thermo-Cal\NUL" (md C:\Thermo-Cal)
echo Check Thermo-cal\%UNIT_ID%
IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\NUL" (md C:\Thermo-Cal\%UNIT_ID%)
FOR /L %%F IN (1,1,99) DO (
    IF NOT EXIST "C:\Thermo-Cal\%UNIT_ID%\log-%%F\NUL" (
        md C:\Thermo-Cal\%UNIT_ID%\log-%%F
        set LOG_DIR=C:\Thermo-Cal\%UNIT_ID%\log-%%F
        goto dir_set
    ) 
)
echo "Couldn't create a directory to save stuff."
goto :EOF
:dir_set
echo Stuff will get saved in: %LOG_DIR%
0 голосов
/ 01 сентября 2011

Это работало в Windows 7:

set "UNIT_ID=00534"
echo Check Thermo-Cal
IF NOT EXIST C:\Thermo-Cal\NUL md C:\Thermo-Cal
echo Check Thermo-cal\%UNIT_ID%
IF NOT EXIST C:\Thermo-Cal\%UNIT_ID%\NUL md C:\Thermo-Cal\%UNIT_ID%
FOR /L %%F IN (1,1,99) DO (
    IF NOT EXIST C:\Thermo-Cal\%UNIT_ID%\log-%%F\NUL  (
        md C:\Thermo-Cal\%UNIT_ID%\log-%%F
        set "LOG_DIR=C:\Thermo-Cal\%UNIT_ID%\log-%%F"
        goto dir_set
    ) 
)
echo "Couldn't create a directory to save stuff."
goto :EOF
:dir_set
echo "Stuff will get saved in: %LOG_DIR%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...