質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

641閲覧

バッチ処理でのシンタックスエラー

Chandler_Bing

総合スコア673

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2019/08/19 07:56

編集2019/08/20 00:16

txt

1歌手名 2 3歌詞 4 5. 6. 7. 8. 9

で構成されるテキストファイルを以下のような形で出力したいです。

デスクトップ\Songs\歌手名\テキストファイル名_op.txt

全てのtxtファイルの1行目には歌手名が入っています。
それを取得して、歌手名としてフォルダを作成します。

以下のコードを作成しました。

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 ( 12 rem それぞれのテキストファイルを1行ずつ読み込む 13 for /f "delims=" %%a in (%%i) do ( 14 set NAME=%%a 15 goto :exit_for 16 ) 17 :exit_for 18 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 (%%i) do ( 24 echo %%a>> %MAKE_FOLDER%\%%i_output.txt 25 ) 26 ) else ( 27 mkdir %MAKE_FOLDER% 28 for /f "delims=" %%a in (%%i) do ( 29 echo %%a>> %MAKE_FOLDER%\%%i_output.txt 30 ) 31 ) 32) 33 34) 35

bat

1if exist %MAKE_FOLDER% ( 2 for /f "delims=" %%a in (%%i) do ( 3 echo %%a>> %MAKE_FOLDER%\%%i_output.txt 4 ) 5 ) else ( 6 mkdir %MAKE_FOLDER% 7 for /f "delims=" %%a in (%%i) do ( 8 echo %%a>> %MAKE_FOLDER%\%%i_output.txt 9 ) 10 )

表題の通りシンタックスエラーが出るのですが、
上記の部分を削除すると

echo %NAME%
echo %MAKE_FOLDER%

の部分まで表示されますが、削除しないと
そこまでも到達しません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

forにはいろいろ制約があるので、そのあたりを熟知していない限り、

CMD

1for ~~~ do 2 ====== 3) 4・・・・・

は、全部、

CMD

1for ~~~ do call :subr1 2・・・・・ 3exit /b 4 5:subr1 6====== 7exit/b

に書き直した方が良いです。

・括弧内で環境変数にセットしても参照するとforに入る前の値になる
gotoするとforから抜ける

投稿2019/08/19 12:13

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

2点修正する事でコマンド実行が可能になりました。(その後エラーとなりましたがそれは別の質問でお願いします。)

  1. 「:exit_for」の後の改行を除去
  2. 「if exist %MAKE_FOLDER% ( 」の変数を「"」で囲む
@echo off setlocal enabledelayedexpansion rem カレントディレクトリにSongsフォルダを作成する set FILE_PATH=Songs\ mkdir Songs if %errorlevel% == 0 ( for %%i in (*.txt) do ( rem それぞれのテキストファイルを1行ずつ読み込む for /f "delims=" %%a in (%%i) do ( set NAME=%%a goto :exit_for ) :exit_for set MAKE_FOLDER=%FILE_PATH%%NAME% echo %NAME% echo %MAKE_FOLDER% if exist "%MAKE_FOLDER%" ( for /f "delims=" %%a in (%%i) do ( echo %%a>> %MAKE_FOLDER%\%%i_output.txt ) ) else ( mkdir %MAKE_FOLDER% for /f "delims=" %%a in (%%i) do ( echo %%a>> %MAKE_FOLDER%\%%i_output.txt ) ) ) )

投稿2019/08/19 08:48

yamap55

総合スコア1376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chandler_Bing

2019/08/20 00:19

現在、新たな問題に直面しておりまして、 デスクトップにtxtファイルが複数あるのですが、1ファイル(......_op.txt)しか生成されません。 なぜでしょうか。
otn

2019/08/20 00:43

私の回答に書いたことが原因です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問