我有这个结构:
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"
)
答案 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文件。看起来你可以处理那个部分。