【发布时间】:2018-12-23 19:02:03
【问题描述】:
接上一个问题:PowerShell/Batch script to rename each file to include original name + folder name
我有几个月的以下文件夹结构:
2017
│
├─April reports
│ ├─01-04-2018
│ │ ├─XYZAPPROVED123.pdf
│ │ ├─XYZAPPROVED123_V2.pdf
│ │ └─XYZUNAPPROVED123.pdf
│ │
│ ├─02-04-2018
│ │ ├─XYZAPPROVED123.pdf
│ │ └─XYZUNAPPROVED123.pdf
│ │
│ │
│ └─30-04-2018
│ ├─XYZAPPROVED123.pdf
│ └─XYZUNAPPROVED123.pdf
│
├─ May reports
│ ├─01-04-2018
│ │ ├─XYZAPPROVED123.pdf
│ │ ├─XYZAPPROVED123_V2.pdf
│ │ └─XYZUNAPPROVED123.pdf
│ │
│ ├─02-04-2018
│ │ ├─XYZAPPROVED123.pdf
│ │ └─XYZUNAPPROVED123.pdf
│ │
│ │
│ ├─30-04-2018
│ ├─XYZAPPROVED123.pdf
.
.
.
├─December reports (etc)
当月每一天的每个文件夹都包含一个已批准和未批准的同名报告(“XYZAPPROVED123”或“XYZUNAPPROVED123”)。有些包含 V2。
我想重命名每一个,以便删除“123”并将文件夹名称(日期)包含在文件名中,例如“XYZAPPROVED_01-04-2018”。我不想用文件夹的名称完全替换文件名,我只想将它添加到末尾,如果可能的话,用下划线分隔。
完成此操作后,我想删除名称中包含“XYZUNAPPROVED”的所有文件,并删除同一文件夹中包含“XYZAPPROVED_V2”的所有“XYZAPPROVED”文件(版本 2 取代原创)。
我已经设法使用下面的脚本获得一个批处理脚本来处理一个月(4 月)的报告。我遇到的问题是添加一个额外的循环,以便我可以运行它所有的几个月。
四月脚本(可行):
@echo off
cd "<actual path>"
for /D %%I in ("<actual path>\????-??-??") do (
for %%J in ("%%I\XYZ*.pdf") do (
if exist "%%I\XYZUN*" del /F "%%I\XYZUN*.pdf"
if exist "%%I\%%~nJ_V*.pdf" ( del "%%J" ) else ren "%%J"
"%%~nJ_%%~nI.pdf"
)
)
所有月份的脚本-(我运行它时没有任何反应)
@echo off
cd "<actual path>"
for /D %%H in ("<actual path>") do (
rem Enter into the month name folder
rem process each date
for /D %%I in ("%%H\????-??-??") do (
for %%J in ("%%I\XYZ*.pdf") do (
if exist "%%I\XYZUN*" del /F "%%I\XYZUN*.pdf"
if exist "%%I\%%~nJ_V*.pdf" ( del "%%J" ) else ren "%%J" "%%~nJ_%%~nI.pdf"
)
)
)
我错过了什么?
【问题讨论】:
标签: batch-file directory rename