PCの整理:フォルダ内にある[ある名称をもつフォルダー/ファイル]を検索するバッチファイル
DirFilSearch_config.txt|コンフィギュレーション・ファイル〔バッチファイルと同じフォルダー内に置く〕
検索対象フォルダー,検索ワード,結果出力ファイル
C:\Users\%username%\Desktop\freeware,ChgKey15,C:\Users\%username%\Desktop\FindstrResult.txt
C:\Users\%username%\Desktop\freeware,KeySwap,C:\Users\%username%\Desktop\FindstrResult.txt
C:\Users\%username%\Desktop\freeware,audacity,C:\Users\%username%\Desktop\FindstrResult.txt
C:\Users\%username%\Desktop\freeware,yWriter,C:\Users\%username%\Desktop\FindstrResult.txt
C:\Users\%username%\Desktop\freeware,カレンダー,C:\Users\%username%\Desktop\FindstrResult.txt
DirFilSearch.bat|バッチファイル本体
:: バッチファイルをUTF-8で保存するときのバッチファイルの先頭は、【1】【2】のどちらでもよい。
:: UTF-8保存時は[BOMなし]と[改行コードCR+LF]の設定が必須である。
:: ●●●【1】
:: @echo off
:: chcp 65001 > nul
:: ●●●【2】
:: chcp 65001 > nul
:: @echo off
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion
set "CONFIG_FILE=%~dp0DirFilSearch_config.txt"
REM -- コンフィグファイル存在チェック
if not exist "%CONFIG_FILE%" (
echo Please create DirFilSearch_config.txt with "directory,word,result_file" per line.
pause
exit /b
)
REM -- 配列初期化
set COUNT=0
REM -- メニュー表示
echo --------------------------------------
echo [Search Settings List]
echo.
for /f "usebackq tokens=1,2,3 delims=," %%A in ("%CONFIG_FILE%") do (
set /a COUNT+=1
set "DIR[!COUNT!]=%%A"
set "WORD[!COUNT!]=%%B"
set "RESULT[!COUNT!]=%%C"
echo [!COUNT!] Dir: %%A Word: %%B Output: %%C
if !COUNT! geq 10 goto MENU
)
:MENU
echo.
set /p SEL=Select number to search (1-!COUNT!, or 9 to exit):
if "%SEL%"=="9" goto END
REM -- 入力チェック
set /a NUM=0
for /l %%i in (1,1,!COUNT!) do (
if "%SEL%"=="%%i" set /a NUM=%%i
)
if %NUM%==0 (
echo Invalid selection.
pause
goto MENU
)
REM -- 選択内容取得
set "SEARCH_DIR=!DIR[%NUM%]!"
set "SEARCH_WORD=!WORD[%NUM%]!"
set "RESULT_FILE=!RESULT[%NUM%]!"
REM -- ディレクトリと出力ファイルの環境変数展開
call set "SEARCH_DIR=%SEARCH_DIR%"
call set "RESULT_FILE=%RESULT_FILE%"
if not exist "%SEARCH_DIR%" (
echo Directory "%SEARCH_DIR%" does not exist.
pause
goto MENU
)
REM -- 検索結果ファイルを必ずクリア
break > "%RESULT_FILE%"
REM -- 一時ファイル名を生成
set "TMP_FILE=%TEMP%\DirFilSearch_tmp_%RANDOM%.txt"
break > "%TMP_FILE%"
REM -- 検索実行(PowerShellで日本語対応、結果は一時ファイルへ)
echo Searching "%SEARCH_DIR%" for "%SEARCH_WORD%" ...
powershell -NoLogo -NoProfile -Command ^
"Get-ChildItem -Path '%SEARCH_DIR%' -Recurse -File -ErrorAction SilentlyContinue | Where-Object { $_.FullName -like '*%SEARCH_WORD%*' } | ForEach-Object { $_.FullName } | Set-Content -Encoding UTF8 '%TMP_FILE%'"
REM -- 検索結果が空かどうか判定(ファイルサイズ0バイトならメッセージ出力)
for %%A in ("%TMP_FILE%") do (
if %%~zA==0 (
echo 検索結果:該当情報なし。> "%RESULT_FILE%"
) else (
copy /Y "%TMP_FILE%" "%RESULT_FILE%" > nul
)
)
del "%TMP_FILE%"
echo.
echo Search complete. Result saved to: %RESULT_FILE%
pause
goto MENU
:END
endlocal