要解压缩的批处理文件然后按顺序重命名其jpgs

时间:2017-03-22 14:21:38

标签: windows batch-file cmd rename

我有这个结构:

Biographies <base folder>
----Elon Musk <person #1 folder>
----|---Modern-Day Genius <chapter name folder>
----|-------Elon Musk - Modern-Day Genius.txt <person #1's biography>
----|-------Elon Musk - Modern-Day Genius.zip <50-100 photos of person #1>
----|-----------Driving a Tesla.jpg <photo 1>
----|-----------Elon Musk on the train.jpg <photo 2>
----|-----------SpaceX factory.jpg <photo ...>
----Steve Jobs <person #2 folder>
----|---Visionary <chapter name folder>
----|-------Steve Jobs - Visionary.txt <bio>
----|-------Steve Jobs - Visionary.zip <zip of photos>
----|-----------At his home in California.jpg <photo 1>
----|-----------At work on the first iPhone.jpg <photo 2>
----|-----------Steve Jobs yelling at people.jpg <photo ...>

我希望1)解压缩.zip文件(使用7zip)                2)使用A)重命名提取的.jpgs文本文件名+ B)增加的数字。

So, you'd end up with:

Under the "Modern-Day Genius" folder, you'd have:
Elon Musk - Modern-Day Genius 001.jpg
Elon Musk - Modern-Day Genius 002.jpg
Elon Musk - Modern-Day Genius 003.jpg

因为“Elon Musk - Modern-Day Genius”是txt文件的根文件名,因为有一些计数器而是001-00n。

and under the "Visionary" folder, you'd have:
Steve Jobs - Visionary 001.jpg
Steve Jobs - Visionary 002.jpg
Steve Jobs - Visionary 003.jpg

etc.

这个过程的声音听起来很容易,但我花了20个小时试图在过去一周内解决这个问题。我不是Windows批处理文件的新手,但我不是很擅长。明显。 ;-)我已经阅读了大约一百个帖子,例子,“教程”等等,而且我在网上找不到任何解决方案。我已经尝试了很多变种,并且有十几个批处理文件可以做,但实际上并没有用。

我认为解决这个问题不仅对我有好处,而且对于其他一些试图解压文件的人来说也是有益的,根据一些外部参数重命名其内容。似乎非常有用。

这是一个例子,但没有一个w /重新编号。我已经'工作'重新编号批处理文件,但它们并没有真正起作用(它们只重命名第一个文件,等等)这是一团糟。我希望有人比我聪明的东西可以帮助解决问题。

@echo off
setlocal enabledelayedexpansion
set PATH=%PATH%;C:\Program Files\7-Zip\

for %%t in ('dir /b *.txt) do (
set textfilename=%%t)

7z e *.zip

for /f %%a in ('dir/b *.jpg) do (
rename "*.jpg" "!textfilename! - *.jpg"
)

2 个答案:

答案 0 :(得分:1)

所以你从传记开始并递归搜索拉链,
将jpg从他们解压缩到同一个文件夹中 使用zip文件的名称和递增的数字重命名这些。 使用for /f及之后for var modifiers ~这并不难。

这批:

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
:: CD /D "X:\Biographies"
For /f "delims=" %%Z in ('Dir /B/S *.zip') Do (
  Pushd "%%~dpZ"
  7z.exe e "%%~Z" *.jpg >Nul 2>&1
  Set Cnt=1000
  For %%J in (*.jpg) Do (
    Set /A Cnt+=1
    Ren "%%J" "%%~nZ !Cnt:~-3!%%~xJ"&&Echo Renamed  "%%J" to "%%~nZ !Cnt:~-3!%%~xJ"
  )
  PopD
)

是否有此示例输出。

Renamed  "Elon Musk on the train.jpg" to "Elon Musk - Modern-Day Genius 001.jpg"
Renamed  "Driving a Tesla.jpg" to "Elon Musk - Modern-Day Genius 002.jpg"
Renamed  "SpaceX factory.jpg" to "Elon Musk - Modern-Day Genius 003.jpg"

Renamed  "Steve Jobs yelling at people.jpg" to "Steve Jobs - Visionary 001.jpg"
Renamed  "At his home in California.jpg" to "Steve Jobs - Visionary 002.jpg"
Renamed  "At work on the first iPhone.jpg" to "Steve Jobs - Visionary 003.jpg"

这是结果结构的树输出。

 > tree /F Biographies
X:\BIOGRAPHIES
 ├───Elon Musk
 │   └───Modern-Day Genius
 │           Elon Musk - Modern-Day Genius 001.jpg
 │           Elon Musk - Modern-Day Genius 002.jpg
 │           Elon Musk - Modern-Day Genius 003.jpg
 │           Elon Musk - Modern-Day Genius.txt
 │           Elon Musk - Modern-Day Genius.zip
 │
 └───Steve Jobs
     └───Visionary
             Steve Jobs - Visionary 001.jpg
             Steve Jobs - Visionary 002.jpg
             Steve Jobs - Visionary 003.jpg
             Steve Jobs - Visionary.txt
             Steve Jobs - Visionary.zip

答案 1 :(得分:0)

获取.txt文件的名称:

for %%a in (*.txt) do ( set Prefix=%%~na)

(示例:%PREFIX%将设置为Modern-Day Genius

将它与一些相当简单的编号代码放在一起:

@echo off    
setlocal enabledelayedexpansion
for %%a in (*.txt) do ( set Prefix=%%~na)

set ZEROS=0000000
set COUNTER=1
for %%a in (*.jpg) do (
    set Value=%ZEROS%%COUNTER%
    set Value=!VALUE:~-3!
    echo rename %%a "%PREFIX% - !VALUE!"
    set /A COUNTER=COUNTER+1 )

我不会处理递归到多个目录或处理ZIP文件。看起来你可以处理那个部分。