透過Windows BAT批次查詢大量檔案是否存在

我有一個檔案列表,裡面完整地羅列出檔案完整的路徑與檔名,那麼要用怎樣的方式才能確認這些檔案分別是否存在與否呢?

透過Windows .BAT來確認大量檔案存在與否

坦白說這種東西用C#寫,也沒幾行就完成了。但這一點小小的工作也要透過C#來開發console應用程式就真的殺雞用牛刀了。其實這種小需求透過古老的bat script寫一下,跑一跑批次就解決了。

首先,請準備一個文字檔案名為list.txt,裡面的內容如下:

C:\Windows\System32\aadauthhelper.dll
C:\Windows\System32\BamSettingsClient.dll
C:\Program Files\7-Zip\7z.dll
C:\Program Files\Brabra\test.exe
D:\Something\ApacheBench\ab.exe
D:\Something\ApacheBench\cd.exe

然後請在這個list.txt同目錄下開啟一個文字檔案,將下列的程式碼貼上,並將檔案取名為FindFile.bat

@echo off
setlocal enabledelayedexpansion

set "inputFile=list.txt"
for /f "delims=" %%a in (%inputFile%) do (
  set "file=%%a"
  if exist "!file!" (
    echo ^|O^|    !file!
  ) else (
    echo ^|X^|    !file!
  )
)

接下來就是去cmd命令模式下跑這隻FindFile.bat批次檔案,如果需要最高管理者權限的話就請適度開啟,以免無法存取到某些機敏目錄,輸出結果如下:

|O|    C:\Windows\System32\aadauthhelper.dll
|O|    C:\Windows\System32\BamSettingsClient.dll
|O|    C:\Program Files\7-Zip\7z.dll
|X|    C:\Program Files\Brabra\test.exe
|O|    D:\Something\ApacheBench\ab.exe
|X|    D:\Something\ApacheBench\cd.exe

結果就會如上面所呈現,|O|代表這個檔案是存在的,而|X|就代表這個檔案不存在嘍。

若想要保存的話可以使用輸出導向成檔案即可,下面範例就是把輸出導向到CheckList.txt檔案保存下來:

C:\>FindFil.bat > CheckList.txt
Windows CommandMode ConsoleMode BAT BatchFile CheckFilesExist FileList