現在のコードは以下です。
CMD
1@echo off 2setlocal enabledelayedexpansion 3 4rem カレントディレクトリにSongsフォルダを作成する 5 6set FILE_PATH=Songs\ 7mkdir Songs 8 9if %errorlevel% == 0 ( 10 11for %%i in (*.txt) do ( 12 set FILE=%%i 13 rem それぞれのテキストファイルを1行ずつ読み込む 14 for /f "delims=" %%a in (%FILE%) do ( 15 set NAME=%%a 16 goto :exit_for 17 ) 18 :exit_for 19 set MAKE_FOLDER=%FILE_PATH%%NAME% 20 echo %NAME% 21 echo %MAKE_FOLDER% 22 if exist "%MAKE_FOLDER%" ( 23 for /f "delims=" %%a in (%FILE%) do ( 24 echo %%a>> %MAKE_FOLDER%\%FILE%_output.txt 25 ) 26 ) else ( 27 mkdir %MAKE_FOLDER% 28 for /f "delims=" %%a in (%FILE%) do ( 29 echo %%a>> %MAKE_FOLDER%\%FILE%_output.txt 30 ) 31 ) 32) 33)
このコードだと、デスクトップに複数のファイルがあるにもかかわらず、1ファイルしか作成されません。
なぜでしょうか。なぜ一番外側のfor文が機能していないのでしょうか。
追記①
bat
1@echo off 2setlocal enabledelayedexpansion 3 4rem カレントディレクトリにSongsフォルダを作成する 5 6set FILE_PATH=Songs\ 7mkdir Songs 8 9if %errorlevel% == 0 ( 10 11 for %%i in (*.txt) do ( 12 set FILE=%%i 13 rem それぞれのテキストファイルを1行ずつ読み込む 14 call :subroutine %FILE% 15 set MAKE_FOLDER=%FILE_PATH%%NAME% 16 if exist "%MAKE_FOLDER%" ( 17 for /f "delims=" %%a in (%FILE%) do ( 18 echo %%a>> %MAKE_FOLDER%\%FILE%_output.txt 19 ) 20 ) else ( 21 mkdir %MAKE_FOLDER% 22 for /f "delims=" %%a in (%FILE%) do ( 23 echo %%a>> %MAKE_FOLDER%\%FILE%_output.txt 24 ) 25 ) 26 ) 27) 28 29:subroutine 30for /f "delims=" %%a in (%1) do ( 31 set NAME=%%a 32 goto :exit_for 33) 34:exit_for 35exit /b
追記②
bat
1@echo off 2setlocal enabledelayedexpansion 3 4rem カレントディレクトリにSongsフォルダを作成する 5 6set FILE_PATH=Songs\ 7mkdir Songs 8 9if %errorlevel% == 0 ( 10 11 for %%i in (*.txt) do call subroutine1 %%i 12 13 rem それぞれのテキストファイルを1行ずつ読み込む 14 for /f "delims=" %%a in (%FILE%) do call:subroutine2 %%a 15 set MAKE_FOLDER=%FILE_PATH%%NAME% 16 if exist "%MAKE_FOLDER%" ( 17 for /f "delims=" %%a in (%FILE%) do call:subroutine3 %%a 18 ) else ( 19 mkdir %MAKE_FOLDER% 20 for /f "delims=" %%a in (%FILE%) do call:subroutine3 %%a 21 ) 22) 23 24:subroutine1 25set FILE=%1 26 27:subroutine2 28set NAME=%1 29goto :exit_for 30:exit_for 31exit /b 32 33:subroutine3 34%1>> %MAKE_FOLDER%\%FILE%_output.txt
追記③
bat
1@echo off 2setlocal enabledelayedexpansion 3 4rem カレントディレクトリにSongsフォルダを作成する 5 6set FILE_PATH=Songs\ 7mkdir Songs 8 9if %errorlevel% == 0 ( 10 11for %%i in (*.txt) do call: function1 %%i 12 13 set MAKE_FOLDER=%FILE_PATH%%NAME% 14 15 if exist "%MAKE_FOLDER%" ( 16 call: function3 %%i 17 ) else ( 18 mkdir %MAKE_FOLDER% 19 call: function3 %%i 20 ) 21) 22 23:function1 24set FILE=%1 25call:function2 %FILE% 26 27:function2 28for /f "delims=" %%a in (%1) do ( 29set NAME=%%a 30goto :exit_for 31) 32:exit_for 33exit /b 34 35:function3 36for /f "delims=" %%a in (%1) do ( 37echo %%a>> %MAKE_FOLDER%\%1_output.txt 38exit /b 39
追記④
bat
1 2@echo off 3for %%i in (*.txt) do call :sub %%i 4echo %FILE% 5exit /b 6 7:function1 8set FILE=%1 9exit /b 10
追記④に対するCMDの表示結果
The system cannot find the batch label specified - The system cannot find the batch label specified - The system cannot find the batch label specified - The system cannot find the batch label specified - 無題2.txt
現在デスクトップには無題2.txtを含めtxtファイルが6つあります。
追記⑤
bat
1@echo off 2 3rem カレントディレクトリにTempフォルダを作成する 4set FILE_PATH=Temp\ 5mkdir Temp 6if not %errorlevel% == 0 exit /b 7 8for %%i in (*.txt) do call :sub %%i 9exit /b 10 11:sub 12 set FILE=%1 13 rem それぞれのテキストファイルを1行ずつ読み込む 14 set /p NAME=<%FILE% 15 set MAKE_FOLDER=%FILE_PATH%%NAME% 16 if not exist "%MAKE_FOLDER%" mkdir "%MAKE_FOLDER%" 17 type "%FILE%" >> %MAKE_FOLDER%\%FILE%_output.txt 18exit /b
一番外側だけ残してその中に適当なコマンドを入れたらわかると思います。
回答1件
あなたの回答
tips
プレビュー