como solicitar número para criar pastas com base na entrada?

0

Eu tenho um BATCH.BAT e quando eu executo, preciso perguntar quantas pastas eu quero criar:

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

então eu preciso digitar o número (que não é maior do que 50, mas maior que 1) e quando eu pressionar enter, eu preciso criar pastas nesta pasta %~dp0..\batch\ . por exemplo. se eu digitar o número 12 isso será criado:

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

e quando as pastas são criadas eu preciso colocar isso em todas as pastas criadas:

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

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

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

como posso conseguir essa criação de pastas com base no número de entrada ??

e também como posso evitar ter 49x IF EXIST "%~dp0..\batch\XY\" ( ??

EDITAR: aqui está minha tentativa:

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%
echo How many folders you want? (enter below)
SET /P "ANSWER=" 
-%%F" ( md "%batch%
%~dp0..\batch\
          |_____ 01
          |
          |_____ 02
          |
          |_____ 03
          |
          |_____ 04
          |
          |_____ 05
          |
          |_____ 06
          |
          |_____ 07
          |
          |_____ 08
          |
          |_____ 09
          |
          |_____ 10
          |
          |_____ 11
          |
          |_____ 12
-%%F") )
    
por user902300 25.05.2018 / 20:56

1 resposta

1

Sua tentativa tem problemas não resolvidos:

  • pesquise a sintaxe / l

  • números abaixo de 10 precisam de um zero inicial (resolvidos adicionando 100 e ocupando os dois últimos lugares)

  • a variável %%F só é válida no escopo do comando for (mesma linha / bloco de código)

O lote a seguir não precisa de expansão atrasada devido à colocação do código em uma sub-rotina chamada, passando o número como um argumento.

:: Q:\Test18\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
    
por 26.05.2018 / 14:18