У меня есть BATCH.BAT, и когда я его запускаю, мне нужно спросить, сколько папок я хочу создать:

echo How many folders you want? (enter below)
SET /P "ANSWER=" 

затем мне нужно ввести число (которое не больше 50, но больше 1), и когда я нажимаю клавишу ввода, мне нужно создать папки в этой папке %~dp0..\batch\ . например, если я введу число 12, это будет создано:

%~dp0..\batch\
          |_____ 01
          |
          |_____ 02
          |
          |_____ 03
          |
          |_____ 04
          |
          |_____ 05
          |
          |_____ 06
          |
          |_____ 07
          |
          |_____ 08
          |
          |_____ 09
          |
          |_____ 10
          |
          |_____ 11
          |
          |_____ 12

и когда папки созданы, мне нужно поместить это в каждую созданную папку:

IF EXIST "%~dp0..\batch\01\" (
ROBOCOPY "%~dp0..\scripts" "%~dp0..\batch\01" "script.1s" /Z /B
BREAK>"%~dp0..\batch\01\t.ini"
BREAK>"%~dp0..\batch\01\k.txt"
BREAK>"%~dp0..\batch\01\s.txt" )

IF EXIST "%~dp0..\batch\02\" (
ROBOCOPY "%~dp0..\scripts" "%~dp0..\batch\02" "script.1s" /Z /B
BREAK>"%~dp0..\batch\02\t.ini"
BREAK>"%~dp0..\batch\02\k.txt"
BREAK>"%~dp0..\batch\02\s.txt" )

IF EXIST "%~dp0..\batch\03\" (
...

Как я могу добиться этого создания папок на основе номера ввода ??

а также как я могу избежать 49x ЕСЛИ EXIST IF EXIST "%~dp0..\batch\XY\" ( ??

РЕДАКТИРОВАТЬ: вот моя попытка:

rem @echo off
setlocal enabledelayedexpansion

:0001
echo How many folders you want? (enter below)
SET /P "ANSWER=" 

set ANSWER="%%F"
IF  %ANSWER% LSS 2  GOTO :0001
IF  %ANSWER% GTR 50 GOTO :0001
SET batch="%~dp0..\batch\"
SET max=25
SET min=2

FOR /L %%F IN (1,%max%,%min%) DO (
    IF NOT EXIST "%batch%\0-%%F" ( 
    md "%batch%\0-%%F")
    )

1 ответ1

1

Ваша попытка имеет нерешенные проблемы:

  • поиск синтаксиса для / л

  • числам ниже 10 нужен начальный ноль (решается добавлением 100 и занятием последних 2 мест)

  • переменная %%F действительна только в области действия команды for (тот же блок строки / кода)

Следующий пакет не нуждается в отложенном расширении из-за помещения кода в вызываемую подпрограмму, передавая число в качестве аргумента.


:: Q:\Test\2018\05\26\SU_1325998.cmd
@Echo off
SET min=2
SET max=50

:0001
Set "ANSWER="
echo How many folders do you want? (enter below)
SET /P "ANSWER=" 
If not defined ANSWER Exit /B
IF %ANSWER% LSS %min% (Echo %ANSWER% is not enaugh min=%min%& GOTO :0001 )
IF %ANSWER% GTR %max% (Echo %ANSWER% is too much   max=%max%& GOTO :0001 )

FOR /L %%F IN (1,1,%ANSWER%) DO Call :Sub %%F
Echo Done
Pause
Goto :Eof

:Sub
Set /A "N=100 + %1"
SET "batch=%~dp0..\batch\%N:~-2%"
IF NOT EXIST "%batch%" md "%batch%" >NUL

:: IMO RoboCopy is overkill here
COPY "%~dp0..\scripts\script.1s" "%batch%" >NUL
for %%A in (t.ini k.txt s.txt) Do if not exist "%batch%\%%A" Break>"%batch%\%%A"

> SU_1325998.cmd
How many folders do you want? (enter below)
1
1 is not enaugh min=2
How many folders do you want? (enter below)
99
99 is too much   max=50
How many folders do you want? (enter below)
3

Done
Drücken Sie eine beliebige Taste . . .

> tree \ /F
├───batch
│   ├───01
│   │       k.txt
│   │       s.txt
│   │       script.1s
│   │       t.ini
│   │
│   ├───02
│   │       k.txt
│   │       s.txt
│   │       script.1s
│   │       t.ini
│   │
│   └───03
│           k.txt
│           s.txt
│           script.1s
│           t.ini
│
├───scripts
│       script.1s
│
└───test
        SU_1325998.cmd

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