2017-03-22 65 views
0

我有这样的结构:批处理文件解压缩然后重命名其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" 
) 

回答

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 
+0

我喜欢你从'1000'使用'Cnt'的技巧,然后只取下3位数字。比我的版本更好! – abelenky

+0

@abelenky谢谢。 AT:user3450848我的编号不是按字母顺序排列的,我的测试文件夹驱动器位于FreeNAS Samba服务器上,而不是NTFS格式的驱动器,其中alpha分类是固有的。我可以使用第二个for/f来代替dir/B/ON。 – LotPings

+0

@LotPings感谢您的快速回复和解释。我正逐行通过你的文件来理解。并查看每一部分。我很困惑,在REN系列中,xJ意味着什么。我看到你在Samba服务器上,所以也许这就是为什么,但是在Win7中,.jpg文件在002而不是001开始编号。我非常感谢你的帮助,试图教给我和其他读者。昨天手动重新命名了数千个文件,我的手很痛苦。 StackOverflow社区非常棒。 – user3450848

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文件。看起来你可以处理那部分。

+0

谢谢@abelenky的帮助!我现在正在逐行处理您的文件,就像我用瓦特扑的代码一样。 – user3450848