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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

3161閲覧

windows バッチプログラムについて

mdke

総合スコア2

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2021/07/16 03:07

Windowsバッチでテキストファイルから読み込んだデータの文字を一部変更して、ファイル出力を行うプログラムを作成しています。

流れとしては、起動.batを起動しファイル名を入力したあとに
test.batが起動しテキストファイルから読み込んだデータの文字を一部変更して、ファイル出力を行います。

その際、半角の()が含まれるファイル名を入力し実行したとき最後まで実行できない状態です。
この場合は、どのように対応したらよいのでしょうか?

ソースコードを張るので、アドバイスをいただきたいです。
下記のソースコードで、半角()がないファイル名を指定した場合に動くことは確認済みです。

ソースコード 起動.bat set /P fileName="変換を行いたいファイル名を入力してください:" call test.bat %fileName% pause test.bat echo off rem ********** 前処理 ********** rem 処理ステータスをゼロセット set status=0 set end_status=0 rem ファイル情報をゼロセット set IN_FILE=%1 set OUT_FILE=kb_%1 set before_string=51 set after_string=21 set b_dammyString=ダミー文字列1 set a_dammyString=ダミー文字列2 rem パス情報をセット set path=%~dp0 set work_path=%path%work set bk_path=%path%bk rem 文字コードをebcdicにする(今はコメントアウト) rem chcp 500 pause :STEP1 rem INファイルの1行読み込んで文字変換してファイル出力 for /f "delims= eol=" %%a in (%IN_FILE%) do ( set line=%%a echo !line:%before_string%=%after_string%!>>%OUT_FILE% GOTO :STEP2 ) :STEP2 rem INファイルを1行目をスキップして残りをファイル出力 for /f "skip=1 delims= eol=" %%a in ("%IN_FILE%") do ( set line=%%a echo !line:%b_dammyString%=%a_dammyString%!>>%OUT_FILE% ) pause IF NOT %ERRORLEVEL%==0 ( SET status=9 ) rem ステータス判定 IF %status% EQU 9 ( ECHO "ファイル変換でエラーが発生しました" SET end_status=9 GOTO :END ) pause rem 実行日の日付フォルダを作成 set foldername=%DATE:/=% mkdir %work_path%\%foldername% mkdir %bk_path%\%foldername% rem IN_FILE,OUT_FILEをそれぞれのフォルダに移動 move %IN_FILE% %bk_path%\%foldername% move %OUT_FILE% %work_path%\%foldername%\%fileName :END rem ********** 後処理 ********** rem スケジューラに返却コードを設定 SET status=%end_status% exit %status%

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

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

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

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

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

guest

回答1

0

ベストアンサー

文をまとめる括弧の中で括弧を含んだファイル名を使うと、その閉じ括弧が、文をまとめる括弧の収量とみなされるので、ファイル名は"で囲む必要があります。

for /fでカッコの中に"で囲まれたものがあると、それはファイル名じゃなくて文字列の扱いなので、usqbackqの指定が必要です。詳しい説明はfor /?を実行してみてください。

CMD

1for /f "delims=" %%A in (xxxxx) do echo %%A 2⇒ xxxxx はファイル名とみなされ、読み出しが行われる 3 4for /f "delims=" %%A in ("xxxxx") do echo %%A 5⇒ xxxxx はファイル名とみなされず、echo %%A では xxxxx とそのまま表示される。 6 7for /f "usebackq delims=" %%A in ("xxxxx") do echo %%A 8⇒ xxxxx はファイル名とみなされ、読み出しが行われる

ということで、

CMD

1for /f "delims= eol=" %%a in (%IN_FILE%) do ( 23for /f "usebackq delims= eol=" %%a in ("%IN_FILE%") do ( 4 5 6for /f "skip=1 delims= eol=" %%a in ("%IN_FILE%") do ( 78for /f "usebackq skip=1 delims= eol=" %%a in ("%IN_FILE%") do ( 9 10 11>>%OUTFILE% 1213>>"%OUTFILE%"

投稿2021/07/16 04:23

otn

総合スコア85901

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

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

mdke

2021/07/16 06:32

回答ありがとうございます。 教えていただいた通りに書きかえたところ、うまくいきました。 また、丁寧に説明の記載もありがとうございました。 ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問