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

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

新規登録して質問してみよう
ただいま回答率
85.48%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

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

Q&A

解決済

1回答

515閲覧

バッチファイルに記載されているコマンドの意味について

soso0programmer

総合スコア35

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

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

0グッド

0クリップ

投稿2023/02/08 08:59

後述するバッチの構文で以下の部分の

"!export_pass!!DIRNAME:*workspace=!"

!DIRNAME:*workspace=!

の箇所は何のために行っているのかどのような意味があるのかがわからないです。
If existsの意味は分かるのですがこの箇所だけ何をしてるのか調べてもわかりませんでした。
分かる方がいましたらご教授願います。
また、このような記述に関して何か参考資料がありましたら教えていただきたいです。
以上です。
宜しくお願いいたします。

rem 指定先にディレクトリ(サブも含む)を作成。 rem ディレクトリ存在チェック if exist "!export_pass!\!DIRNAME:*workspace\=!" ( echo !export_pass!\!DIRNAME:*workspace\=!が存在するためスキップします。 ) else ( mkdir !export_pass!\!DIRNAME:*workspace\=! echo !export_pass!\!DIRNAME:*workspace\=!を作成しました。 )

以下に全体ソースを添付いたします。

環境設定.bat

rem エクスポート先のディレクトリ名を記載してください。 set export_pass=*** rem workspaceパスを記載してください。 set workspace_pass=***

export_file.bat

1@echo off 2setlocal EnableDelayedExpansion 3 4call 環境設定.bat 5 6 7echo %date% %time% エクスポートを開始します。 >> export_file.log 8 9rem 外部ファイルからエクスポートしたいファイル名を一行ずつ取得。 10for /f %%a in (file_list.txt) do ( 11 12 rem ファイル名を代入。 13 set FILENAME=%%a 14 15 rem 対象ファイルのフルパスを取得。 16 for /f "usebackq delims=" %%i in (`where /R !workspace_pass! !FILENAME!`) do ( 17 18 rem フルパスを代入。 19 set DIRNAME_FULL=%%i 20 21 rem フルパスに「WebContent\WEB-INF\classes」が含まれていないかチェック。 22 echo !DIRNAME_FULL! | find "WebContent\WEB-INF\classes" >NUL 23 if not ERRORLEVEL 1 ( 24 rem 25 ) else ( 26 rem フルパスからファイル名を除外し、ディレクトリ名を取得。 27 set DIRNAME=%%~pi 28 29 rem 指定先にディレクトリ(サブも含む)を作成。 30 rem ディレクトリ存在チェック 31 if exist "!export_pass!\!DIRNAME:*workspace\=!" ( 32 echo !export_pass!\!DIRNAME:*workspace\=!が存在するためスキップします。 33 ) else ( 34 mkdir !export_pass!\!DIRNAME:*workspace\=! 35 echo !export_pass!\!DIRNAME:*workspace\=!を作成しました。 36 ) 37 38 rem 対象ファイルを指定先ディレクトリにコピー。 39 copy !DIRNAME_FULL! !export_pass!\!DIRNAME:*workspace\=! 40 echo 対象ファイル:!FILENAME! 41 42 rem ログ出力用 43 echo !export_pass!\!DIRNAME:*workspace\=!!FILENAME! >> export_file.log 44 45 ) 46 ) 47) 48 49echo %date% %time% エクスポートが終了しました。 >> export_file.log 50pause 51

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

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

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

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

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

guest

回答1

0

ベストアンサー

setlocal enabledelayedexpansionしてある場合は、!変数名!で環境変数の参照が出来ると言うことは理解していますか?
!DIRNAME:*workspace=!は、環境変数の参照時に文字列を置換する機能です。説明は、コマンドプロンプトで、set /?と打つと出てきます。この場合は先頭からworkspaceまでを空と置換(=削除)ですね。

これに限らずコマンドの説明は、コマンド名 /?で表示されます。環境変数に関することはsetコマンドに説明があります。

投稿2023/02/08 09:15

otn

総合スコア84533

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

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

soso0programmer

2023/02/14 09:52

返信が遅れて申し訳ありません。 回答ありがとうございました。 解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問