通过添加日期批量重命名文件夹中的文件
Batch renaming files in folder by adding date
我有一个批处理文件,可以移动和组织一些东西。我想在该批处理的末尾添加一些代码,以将所有文件重命名为相同的名称,但除了结尾之外的日期仅以数字表示。也许我不擅长搜索,因为我发誓这已经被覆盖了,但我就是找不到。所以总而言之,我需要帮助编写代码来转换文件夹中末尾没有日期的每个文件,以将日期添加到末尾。所以它需要检查末尾是否有8位数字,如果没有则添加日期。我将 post 我的批处理文件以防万一你需要知道我在做什么
rem @echo off
SETLOCAL enableextensions
Set dat=Date
for %%x in (*.pdf) do (
set "_pdfname=%%x"
call :doAllWork
)
goto :eof
:doAllWork
ECHO start
start %_pdfname%
TIMEOUT /T 2 /NOBREAK
start select.vbs
TIMEOUT /T 1 /NOBREAK
start copy.vbs
TIMEOUT /T 1 /NOBREAK
for /F %%g in ('
wmic OS get LocalDateTime /value^|findstr "="
') do for /F %%G in ("%%g") do set "_%%G"
echo %_LocalDateTime:~0,14%
type NUL > TextFiles\%_LocalDateTime:~0,14%.txt
start TextFiles\%_LocalDateTime:~0,14%.txt
TIMEOUT /T 2 /NOBREAK
ECHO close PDF
start close.vbs
TIMEOUT /T 2 /NOBREAK
start window.vbs
TIMEOUT /T 1 /NOBREAK
start paste.vbs
TIMEOUT /T 1 /NOBREAK
start save.vbs
TIMEOUT /T 1 /NOBREAK
start close.vbs
start enter.vbs
move /-y "%_pdfname%" "OldTimesheets\"
TIMEOUT /T 1 /NOBREAK
ECHO exit loop
if exist *.pdf (
goto :eof
) else (
goto :end
)
:end
cscript MessageBox.vbs "This will be shown in a popup."
所以最后,OldTimesheets 中的所有新 PDF 都需要重命名,但旧的 PDF 将具有它们放入其中的日期。
提前致谢!这个社区永远很棒!
@echo off
SETLOCAL enableDelayedExpansion
for /f "delims=" %%x in ('dir /b *.pdf') do (
call :doAllWork "%%x"
)
for /f "delims=" %%x in ('dir /b *.pdf') do (
echo %%x | findstr /r "_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\." >nul
if errorlevel 1 ren "%%x" "%%~fx_!_LocalDateTime:~0,8!%%~nx"
)
cscript MessageBox.vbs "This will be shown in a popup."
pause
exit
:doAllWork
ECHO start
start %1
TIMEOUT /T 2 /NOBREAK & start select.vbs
TIMEOUT /T 1 /NOBREAK & start copy.vbs
TIMEOUT /T 1 /NOBREAK
for /F "delims== tokens=2" %%g in ('
wmic OS get LocalDateTime /value ^| find "="
') do set _LocalDateTime=%%g
echo !_LocalDateTime:~0,14!
type NUL > TextFiles\!_LocalDateTime:~0,14!.txt
start TextFiles\!_LocalDateTime:~0,14!.txt
TIMEOUT /T 2 /NOBREAK & ECHO close PDF & start close.vbs
TIMEOUT /T 2 /NOBREAK & start window.vbs
TIMEOUT /T 1 /NOBREAK & start paste.vbs
TIMEOUT /T 1 /NOBREAK & start save.vbs
TIMEOUT /T 1 /NOBREAK & start close.vbs & start enter.vbs
move /-y "%1" "OldTimesheets\"
TIMEOUT /T 1 /NOBREAK & ECHO exit loop
exit /b
备注:
- 已将
*.pdf
的直接枚举替换为 dir /b *.pdf
,以防止在重命名文件后重新处理文件。
- 添加了
SETLOCAL enableDelayedExpansion
以使 _LocalDateTime
在每次赋值时更改其值,在这种情况下也应使用 !
而不是 %
- 已删除
SETLOCAL enableextensions
,因为它默认启用
- 简化了一些内容以提高可读性
我自己想出来的!我添加了
set str=%date%
echo.%str%
set str=%str:/=%
echo.%str%
在乞讨和使用
ren OldTimesheets\%_pdfname% %str%%_pdfname%
就在移动线之后。奇迹般有效!无论如何感谢您的帮助!
我有一个批处理文件,可以移动和组织一些东西。我想在该批处理的末尾添加一些代码,以将所有文件重命名为相同的名称,但除了结尾之外的日期仅以数字表示。也许我不擅长搜索,因为我发誓这已经被覆盖了,但我就是找不到。所以总而言之,我需要帮助编写代码来转换文件夹中末尾没有日期的每个文件,以将日期添加到末尾。所以它需要检查末尾是否有8位数字,如果没有则添加日期。我将 post 我的批处理文件以防万一你需要知道我在做什么
rem @echo off
SETLOCAL enableextensions
Set dat=Date
for %%x in (*.pdf) do (
set "_pdfname=%%x"
call :doAllWork
)
goto :eof
:doAllWork
ECHO start
start %_pdfname%
TIMEOUT /T 2 /NOBREAK
start select.vbs
TIMEOUT /T 1 /NOBREAK
start copy.vbs
TIMEOUT /T 1 /NOBREAK
for /F %%g in ('
wmic OS get LocalDateTime /value^|findstr "="
') do for /F %%G in ("%%g") do set "_%%G"
echo %_LocalDateTime:~0,14%
type NUL > TextFiles\%_LocalDateTime:~0,14%.txt
start TextFiles\%_LocalDateTime:~0,14%.txt
TIMEOUT /T 2 /NOBREAK
ECHO close PDF
start close.vbs
TIMEOUT /T 2 /NOBREAK
start window.vbs
TIMEOUT /T 1 /NOBREAK
start paste.vbs
TIMEOUT /T 1 /NOBREAK
start save.vbs
TIMEOUT /T 1 /NOBREAK
start close.vbs
start enter.vbs
move /-y "%_pdfname%" "OldTimesheets\"
TIMEOUT /T 1 /NOBREAK
ECHO exit loop
if exist *.pdf (
goto :eof
) else (
goto :end
)
:end
cscript MessageBox.vbs "This will be shown in a popup."
所以最后,OldTimesheets 中的所有新 PDF 都需要重命名,但旧的 PDF 将具有它们放入其中的日期。 提前致谢!这个社区永远很棒!
@echo off
SETLOCAL enableDelayedExpansion
for /f "delims=" %%x in ('dir /b *.pdf') do (
call :doAllWork "%%x"
)
for /f "delims=" %%x in ('dir /b *.pdf') do (
echo %%x | findstr /r "_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\." >nul
if errorlevel 1 ren "%%x" "%%~fx_!_LocalDateTime:~0,8!%%~nx"
)
cscript MessageBox.vbs "This will be shown in a popup."
pause
exit
:doAllWork
ECHO start
start %1
TIMEOUT /T 2 /NOBREAK & start select.vbs
TIMEOUT /T 1 /NOBREAK & start copy.vbs
TIMEOUT /T 1 /NOBREAK
for /F "delims== tokens=2" %%g in ('
wmic OS get LocalDateTime /value ^| find "="
') do set _LocalDateTime=%%g
echo !_LocalDateTime:~0,14!
type NUL > TextFiles\!_LocalDateTime:~0,14!.txt
start TextFiles\!_LocalDateTime:~0,14!.txt
TIMEOUT /T 2 /NOBREAK & ECHO close PDF & start close.vbs
TIMEOUT /T 2 /NOBREAK & start window.vbs
TIMEOUT /T 1 /NOBREAK & start paste.vbs
TIMEOUT /T 1 /NOBREAK & start save.vbs
TIMEOUT /T 1 /NOBREAK & start close.vbs & start enter.vbs
move /-y "%1" "OldTimesheets\"
TIMEOUT /T 1 /NOBREAK & ECHO exit loop
exit /b
备注:
- 已将
*.pdf
的直接枚举替换为dir /b *.pdf
,以防止在重命名文件后重新处理文件。 - 添加了
SETLOCAL enableDelayedExpansion
以使_LocalDateTime
在每次赋值时更改其值,在这种情况下也应使用!
而不是%
- 已删除
SETLOCAL enableextensions
,因为它默认启用 - 简化了一些内容以提高可读性
我自己想出来的!我添加了
set str=%date%
echo.%str%
set str=%str:/=%
echo.%str%
在乞讨和使用
ren OldTimesheets\%_pdfname% %str%%_pdfname%
就在移动线之后。奇迹般有效!无论如何感谢您的帮助!