2017-09-18 34 views
1

FORループで文字列を追加する際に問題があります。バッチ:FORループで文字列を追加する方法

アレイに格納されている名前ごとにサブフォルダを作成したいとします。 サブフォルダは、userによって指定された名前のフォルダに属します。例えば

、私は以下の私の配列内の名前がある場合: - フォルダを1 - フォルダ2 - フォルダ私はフォルダを持っているしたい3

C:\ MyFolderというフォルダ\ 1 C:¥MyFolder¥Folder 2 C:¥MyFolder¥Folder 3

前述のとおり、「MyFolder」の名前はコマンドラインでユーザーによって入力されます。ここで

は、コードは次のとおりです。

@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 

答えて

2

すでに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

ありがとうございます!私はEnableDelayedExpansionの目的を理解しておらず、 "!...!"を使用していました。私はあなたの兆候に従った私の質問の答えでコードを更新します。 –

関連する問題