【AIによる回答】
Windowsバッチファイルで、第一引数にファイル名、第二引数にフォルダパスを受け取り、そのファイルが指定フォルダ内に存在するかを判定するスクリプトは以下の通りです。
if existコマンドを使用して、フォルダパスとファイル名を結合したパス("%~2\%~1")の存在を確認します。とほほのWWW入門 +1バッチファイル作成例 (check_file.bat)batch
@echo off setlocal :: 引数が足りない場合のチェック if "%~1"=="" goto usage if "%~2"=="" goto usage set "FILENAME=%~1" set "FOLDERPATH=%~2" set "TARGET=%FOLDERPATH%\%FILENAME%" echo Checking file: "%TARGET%" :: ファイル存在判定 if exist "%TARGET%" ( echo [OK] ファイルが存在します。 ) else ( echo [NG] ファイルが存在しません。 ) goto end :usage echo Usage: %~nx0 ^<filename^> ^<folderpath^> echo Example: %~nx0 test.txt C:\Temp :end endlocal pause使い方
- 上記のコードを
check_file.batとして保存します。- コマンドプロンプトから以下のように引数を指定して実行します。
cmd
check_file.bat test.txt C:\Users\YourUser\Documents解説
%~1/%~2: 引数にダブルクォーテーションが含まれている場合に、自動的に除去して扱います(スペース対策)。"%~2\%~1": フォルダとファイル名を結合し、パス全体をダブルクォーテーションで囲むことで、空白を含んだフォルダ名やファイル名にも対応します。if exist "パス": 指定したパスにファイルまたはフォルダが存在するか判定します。ほほのWWW入門 +2このスクリプトは、ファイルが存在する場合(
[OK])と存在しない場合([NG])で処理を分けることができます。とほほのWWW入門 +1
ご要望の処理を行うバッチファイルのサンプルです。batch@echo off set "FILENAME=%~1" set "FOLDERPATH=%~2" if exist "%FOLDERPATH%\%FILENAME%" ( echo ファイル「%FILENAME%」は「%FOLDERPATH%」に存在します。 ) else ( echo ファイル「%FILENAME%」は見つかりませんでした。 )コードは注意してご使用ください。ポイント
%~1%~2: 引数にダブルクォーテーションが含まれていても、それを除去して正しくパスを結合できます。if exist: ファイルやフォルダの有無を確認する標準的なコマンドです。- 変数の囲み: パスにスペースが含まれる場合を考慮し、
"%FOLDERPATH%\%FILENAME%"のように全体をダブルクォーテーションで囲んでいます。このコードを.batファイルとして保存し、コマンドプロンプトからtest.bat sample.txt C:\tempのように実行してください。
複数のファイル名を記述した「リスト用テキストファイル」を読み込み、指定したフォルダ内にそれらが存在するかを順次チェックする構成です。バッチファイルのサンプルbatch@echo off set "LISTFILE=%~1" set "FOLDERPATH=%~2" if not exist "%LISTFILE%" ( echo リストファイルが見つかりません: %LISTFILE% exit /b ) for /f "usebackq delims=" %%A in ("%LISTFILE%") do ( if exist "%FOLDERPATH%\%%A" ( echo [ 〇 ] %%A ) else ( echo [ × ] %%A : 見つかりません ) )コードは注意してご使用ください。使い方
- チェックしたいファイル名を1行ずつ書いたテキスト(例:
list.txt)を用意します。- コマンドプロンプトで以下のように実行します。
test.bat list.txt C:\TargetFolder解説
for /f: テキストファイルの内容を1行ずつ読み込むループ処理です。usebackq: ファイル名やパスにスペースが含まれていても、ダブルクォーテーションで囲んで正しく読み込めるようにするオプションです。delims=: 行全体を一つの変数(%%A)として読み込みます(これがないとスペースで分割されてしまいます)。見つからなかったファイル名だけを別のログファイルに書き出すような処理も必要でしょうか?
