Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

Windowsバッチファイルで、第一引数にファイル名、第二引数にフォルダパスを受け取り、そのファイルが指定フォルダ内に存在するかを判定するスクリプト【Ask_AI】

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

【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
使い方
  1. 上記のコードを check_file.bat として保存します。
  2. コマンドプロンプトから以下のように引数を指定して実行します。

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. チェックしたいファイル名を1行ずつ書いたテキスト(例: list.txt)を用意します。
  2. コマンドプロンプトで以下のように実行します。
    test.bat list.txt C:\TargetFolder
解説
  • for /f: テキストファイルの内容を1行ずつ読み込むループ処理です。
  • usebackq: ファイル名やパスにスペースが含まれていても、ダブルクォーテーションで囲んで正しく読み込めるようにするオプションです。
  • delims=: 行全体を一つの変数(%%A)として読み込みます(これがないとスペースで分割されてしまいます)。
見つからなかったファイル名だけを別のログファイルに書き出すような処理も必要でしょうか?
タイトルとURLをコピーしました