В настоящее время я пишу командный файл Windows, который должен проверить, существует ли папка с текущим именем компьютера. Если это не так, он записывает папку с именем, но если она уже есть, он добавляет число в конце, так что в конце у меня будет папка, содержащая имена папок, подобные этой

G:\logs\computer-1
G:\logs\computer-2
G:\logs\computer-3
G:\logs\...

до сих пор я пытался использовать этот кусок кода

set usb=G:
SET logdir="%usb%\logs\%computername%"
FOR /L %%F IN (1,1,25) DO (
IF NOT EXIST "%usb%\logs\%computername%-%%F" (
md "%usb%\logs\%computername%-%%F"
SET logdir=%usb%\logs\%computername%-%%F)
goto :eof
)
ECHO %logdir%

но все, что мне удается сделать, это выйти из цикла, а не то, что я хочу сделать.

2 ответа2

1
setlocal

set dir=G:\logs\%computername%

set n=0
md "%dir%"||call :a %n%

rem rest of your script    

exit

rem the a label is set after the exit function to prevent it from
rem running in the actual script when it's not required.

:a
set /a n+=1
md "%dir%-%n%"||goto a
exit /b

Этот скрипт создаст нумерованные папки так, как вы описали.

В пакете синтаксис для set set "foo=bar" . Кавычки необходимы, когда переменные содержат символы, нарушающие синтаксис, такие как & или |. Пробелы не требуют кавычек при объявлении переменных. set foo="bar" устанавливает foo в значение "bar" .

0

Вариант 1 - Создание всех папок одновременно

Исходя из начального кода в вашем вопросе, это создаст папку с расширением (от 1 до макс.), Если она еще не существует в одном вызове:

SET usb=G:

SET logdir="%usb%\logs"

SET max=25

FOR /L %%F IN (1,1,%max%) DO (
    IF NOT EXIST "%logdir%\%computername%-%%F" ( 
    md "%logdir%\%computername%-%%F")
    )

Ex.

Пример создания пакетной папки одновременно

Вариант 2 - Создание папок постепенно

В качестве второго варианта нижеприведенное решение добавит добавочное расширение файла один раз за вызов (на основе общего количества папок в каталоге). Кроме того, он игнорирует существующие папки:

SET usb=G:

SET logdir="%usb%\logs"

FOR /f %%A IN ('dir /b /ad %logdir%^|find /c /v "" ') DO SET fcount=%%A

SET /a fcount+=1

IF NOT EXIST "%logdir%\%computername%-%%A" (
    MD "%logdir%\%computername%-%fcount%")

Ex.

Пример создания пакетной папки один раз за вызов

Предостережения

  • Первое решение всегда будет создавать папки от 1 до макс.

  • Второе решение имеет недостаток в том, что оно использует общее количество папок в каталоге. Таким образом, хотя он будет создавать папки с одинаковыми именами с числовыми расширениями, для истинно упорядоченных последовательностей без пробелов (то есть -1, -2, -3, -4 ...) требуется:

    • все имена папок в каталоге должны быть одинаковыми.
    • любые дополнительные папки (например, добавленные вручную) сохраняют эту последовательность (т. е. если существует компьютер-6 , следующая добавленная вручную папка должна быть компьютером-7).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .