批处理文件解压缩然后重命名其JPG文件依次
我有这样的结构:批处理文件解压缩然后重命名其JPG文件依次
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"
)
所以,你在简历开始,递归搜索拉链,
解压缩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
要获得.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文件。看起来你可以处理那部分。
谢谢@abelenky的帮助!我现在正在逐行处理您的文件,就像我用瓦特扑的代码一样。 – user3450848
我喜欢你从'1000'使用'Cnt'的技巧,然后只取下3位数字。比我的版本更好! – abelenky
@abelenky谢谢。 AT:user3450848我的编号不是按字母顺序排列的,我的测试文件夹驱动器位于FreeNAS Samba服务器上,而不是NTFS格式的驱动器,其中alpha分类是固有的。我可以使用第二个for/f来代替dir/B/ON。 – LotPings
@LotPings感谢您的快速回复和解释。我正逐行通过你的文件来理解。并查看每一部分。我很困惑,在REN系列中,xJ意味着什么。我看到你在Samba服务器上,所以也许这就是为什么,但是在Win7中,.jpg文件在002而不是001开始编号。我非常感谢你的帮助,试图教给我和其他读者。昨天手动重新命名了数千个文件,我的手很痛苦。 StackOverflow社区非常棒。 – user3450848