2017-09-18 4 views
1

Je rencontre des problèmes pour ajouter des chaînes dans la boucle FOR.Batch: comment ajouter une chaîne dans la boucle FOR

Je souhaite créer des sous-dossiers pour chaque nom stocké dans un tableau. Les sous-dossiers appartiennent à un dossier avec un nom donné par l'utilisateur.

Par exemple, si je les noms suivants dans mon tableau: - Dossier 1 - Dossier 2 - Dossier 3

Je veux avoir les dossiers:

C: \ MonDossier \ Dossier 1 C: \ MonDossier \ dossier 2 C: \ MonDossier \ dossier 3

Comme précédent dit, le nom de "MyFolder" est saisi par l'utilisateur dans la ligne de commande.

Voici le code:

@echo off 
@break off 
@title Generate Billing Subfolders 
@color 0a 
@cls 

setlocal EnableDelayedExpansion 

SET "batch_path=%~dp0" 
SET "first_folder=01. Folder1" 
SET "second_folder=02. Folder2" 
SET "third_folder=03. Folder3" 

:: Create the new Working Data folder 
SET /p new_folder_name= Enter Directory Name: 
SET "full_path=%batch_path%%new_folder_name%" 

ECHO Working... 

IF NOT EXIST ("%full_path%") (
    MKDIR %new_folder_name% 
    IF "!errorlevel!" EQU "0" (
    ECHO Folder created successfully. 
) ELSE (
    ECHO Error while creating folder. 
) 
) ELSE (
    ECHO Folder already exists. 
) 

SET "folders_list="%first_folder%" "%second_folder%" "%third_folder%"" 


FOR %%f in (%folders_list%) DO (
    :: Displays the folder name in array correctly 
    ECHO %%f 
    :: Displays ECHO is off. Why? 
    CALL SET "updated_full_path=%full_path%\%%f" 
    ECHO %updated_full_path% 
    PAUSE 


) 
PAUSE 
EXIT 

Répondre

2

Puisque vous avez déjà enabled delayed expansion:

setlocal EnableDelayedExpansion 

.... 


FOR %%f in (%folders_list%) DO (
    :: Displays the folder name in array correctly 
    ECHO %%f 
    :: Displays ECHO is off. Why? 
    SET "updated_full_path=!full_path!\%%f" 
    ECHO !updated_full_path! 
    PAUSE 


) 
PAUSE 
+0

Merci! Je ne comprenais pas le but de EnableDelayedExpansion et en utilisant "! ...!". Je mettrai à jour le code avec la réponse de ma question en suivant vos indications. –