2025/04/03(木)Windowsのスクリーンショットファイル名をリネーム
2024-08-26.png 2024-08-26 (1).png 2024-08-26 (2).png ...という、どうしようもないファイル名になってくれます。いろいろ面倒なのでファイル更新日時をつかってファイル名をリネームするバッチファイルを作成。
完全なリネームは怖いのでファイルコピー生成して問題なさそうであれば元のファイルは手動で削除する方法とした。
@echo off
setlocal enabledelayedexpansion
set input_folder="C:\tmp\in"
set output_folder="C:\tmp\out"
if not exist "%output_folder%" mkdir "%output_folder%"
REM Check the number of files in the input folder
set file_count=0
for %%F in ("%input_folder%\*.png") do (
set /a file_count+=1
)
if %file_count%==0 (
echo No files found in the input folder.
pause
exit /b
)
echo Total number of files to process: %file_count%
echo ------------------------------
echo Starting the script...
echo ------------------------------
REM Initialize debug log file
set debug_log=debug_log.txt
echo Debug log started > "%debug_log%"
REM Process each file in the input folder
for %%F in ("%input_folder%\*.png") do (
REM Store the current file name (full path)
set "current_file=%%~F"
REM echo Processing file: !current_file! >> "%debug_log%"
REM Extract file's last modified date and time
for /f "tokens=1-5 delims=/:- " %%A in ("%%~tF") do (
set year=%%A
set month=%%B
set day=%%C
set hour=%%D
set minute=%%E
)
REM Initialize counter and filename variable
set counter=00
set new_filename=
set duplicate_found=0
set temp_counter=0
REM Loop to check for duplicate filenames
for /l %%I in (0,1,99) do (
set temp_counter=00!temp_counter!
set temp_counter=!temp_counter:~-2!
set new_filename=!year!-!month!-!day!_!hour!!minute!!temp_counter!.png
if exist "%output_folder%\!new_filename!" (
set /a temp_counter=!temp_counter!+1
) else (
REM echo !new_filename!
)
)
REM Handle cases where no filename could be generated
if "!new_filename!"=="" (
echo Error generating filename for: !current_file! >> "%debug_log%"
echo Error generating filename for: !current_file!
goto next_file
)
REM Copy the file to the output folder
copy "!current_file!" "%output_folder%\!new_filename!" >nul
timeout /t 1 >nul
if errorlevel 1 (
echo Copy failed: "!current_file!" >> "%debug_log%"
) else (
REM echo Copy successful: "!current_file!" saved as !new_filename!
REM echo Copy successful: "!current_file!" saved as !new_filename! >> "%debug_log%"
)
:next_file
REM echo File processing completed: !current_file! >> "%debug_log%"
)
REM Completion message
echo Script has completed. Check the log file: "%debug_log%"
pause
"set input_folder"と"set output_folder"は適宜変更し、"timeout /t 1 >nul"は不要であれば削除。