@echo off
setlocal
rem Validate receipt is only digits, set to 1.
set "validate_receipt_is_digits=1"
rem Order by month in name i.e. Jan, Feb ... or order by file date, set to 1.
set "order_by_name=0"
:Main
rem Set pattern to use.
set "pattern=/od *.pdf"
if "%order_by_name%" == "1" set pattern=*Jan*.pdf *Feb*.pdf^
*Mar*.pdf *Apr*.pdf *May*.pdf *Jun*.pdf *Jul*.pdf^
*Aug*.pdf *Sep*.pdf *Oct*.pdf *Nov*.pdf *Dec*.pdf
rem Get the mode and name of the folder of the current directory.
if exist receipts.txt (
set "mode=SemiAuto"
) else set "mode=Manual"
for %%A in ("%cd%") do set "folder=%%~nxA"
echo %mode% mode in folder "%folder%".
echo(
rem Prompt to continue with pdf file renaming.
set "reply=n"
set /p "reply=Start renaming PDF files? [n|y]: "
if /i "%reply%" == "y" (
echo(
call :%mode%
)
exit /b 0
:Manual
setlocal enabledelayedexpansion
for /f "delims=" %%A in ('dir /b %pattern%') do (
rem Clear the console screen.
cls
rem Preview pdf name.
echo Name: %%~nA
rem Get receipt number.
set "reply="
set /p "reply=Enter receipt no: "
rem Validate the reply is digits.
if defined reply (
if "%validate_receipt_is_digits%" == "1" (
for /f "delims=1234567890" %%B in ("!reply!") do set "reply="
)
)
rem Rename the pdf file if replied with a receipt number.
if defined reply (
set "newname=%%~nA!reply!%%~xA"
echo Rename: "%%~A" "!newname!"
ren "%%~A" "!newname!"
echo Status: Reply used.
) else (
echo Status: Skipped.
)
echo(
rem Allow user to see the status.
pause
)
exit /b 0
:SemiAuto
setlocal enabledelayedexpansion
set "first_receipt="
set "receipt="
(
for /f "delims=" %%A in ('dir /b %pattern%') do (
rem Clear the console screen.
cls
rem First receipt number.
if not defined first_receipt (
set /p "receipt=" <&3
set "first_receipt=defined"
)
rem Preview pdf name and receipt number.
echo Name: %%~nA
echo Receipt: !receipt!
rem Get receipt number. Space = current receipt number.
set "reply="
set /p "reply=Enter receipt no: "
if "!reply!" == " " set "reply=!receipt!"
rem Validate the reply is digits.
if defined reply if not "!reply!" == " " (
if "%validate_receipt_is_digits%" == "1" (
for /f "delims=1234567890" %%B in ("!reply!") do set "reply="
)
)
rem Rename the pdf file if replied with a receipt number.
if defined reply (
set "newname=%%~nA!reply!%%~xA"
echo Rename: "%%~A" "!newname!"
ren "%%~A" "!newname!"
if "!reply!" == "!receipt!" (
echo Status: Receipt used.
) else (
echo Status: Reply used.
)
) else (
echo Status: Skipped.
)
rem Get another receipt number if last number was used.
if "!reply!" == "!receipt!" set /p "receipt=" <&3
echo(
rem Allow user to see the status.
pause
)
) 3< receipts.txt
exit /b 0
Этот код выполняет 2 режима.Если файл receipts.txt
существует, используется режим SemiAuto, в противном случае используется ручной режим.
В ручном режиме, если ответ не определен, переименование пропускается.Если ответ определен, то файл PDF переименовывается со значением квитанции.
В режиме SemiAuto, если ответ не определен, переименование пропускается.Если ответом является Пробел , номер квитанции, считанный из receipts.txt
, используется для переименования файла PDF.Если ответ является другим, то это значение используется для переименования файла PDF.
Пример receipts.txt
содержимое:
5690
5692
5789
5880
5888
В режиме SemiAuto, если 5690
используется при первом переименовании, введя 5690
или введя Пробел , тогда 5692
будет следующим номером квитанции, в противном случае 5690
сохраняется для 2-го переименования или 3-гопереименовывайте и т. д. до тех пор, пока оно не будет использовано.
Если для validate_receipt_is_digits
установлено значение 1
, допускается только один ввод, если значение состоит только из цифр.Переименование будет пропущено, если значение не всех цифр.Допустимые цифры: 1234567890
.
Если для order_by_name
установлено значение 1
, порядок поиска файлов определяется по месяцу в имени файла, т.е. *Jan*.pdf *Feb*.pdf ...
.Этот параметр не распознает годы.Так что 01Jan2020
придет раньше 01Feb2019
.Поскольку файлы PDF создаются ежедневно, по умолчанию установлено значение 0
, поэтому порядок будет по дате файла.Просмотрите dir /?
об использовании /o
с d
, который объясняет порядок сортировки.