4

[持续更新]批处理重命名系列案例

 3 years ago
source link: https://zhang.ge/116.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
[持续更新]批处理重命名系列案例 | 张戈博客
Jager · 12月17日 · 2013年bat · 变量延迟 · 变量拓展 · 批处理 · 遍历 · 重命名 296次已读

批处理用于文本/文件的操作确实非常简单有力!不用多么复杂的代码,仅一个记事本加上简洁的代码即可搞定大部分文本/文件的操作,下面记录下我用过的一些代码,基本都是我在百度回答知友的一些代码,既给涧客们参考,也让起到备忘的作用。。。。(本文是系列博文,将持续更新,敬请关注!)


百度原址 知友问:
想把一个文件夹里的全部文件都命名成001,002……这样按顺序,什么顺序无所谓,只要名字都变了就行,谁帮忙写个

我给出的代码:

@echo off
setlocal enabledelayedexpansion
set var=1000
for /r "%~dp0" %%i in (*.*) do (
set /a var+=1
if not "%%~nxi"=="%~nx0" ren "%%i" !var:~-3!%%~xi
pause>nul
echo 处理完毕,任意键退出...

简单解释:
1.使用for /r 遍历当前目录(%~dp0)下所有文件,效率比for /f + dir /s /b 高;
2.if not语句用于排除bat文件本身,全路径是%0,拓展到bat文件名:%~nx0;
3.利用变量1000开始累加,每次利用!var:~-3!取得后三位,即依次为001、002、003...
Ps:var=1000,那么此脚本最多重命名999个文件,再多将出现覆盖错误,如何修改?请涧客思考,最好能在评论中留下您的代码,呵呵!(比较简单,大虾请勿拍砖!)


案例二、
百度原址 知友问:

“比如,我有一个文件夹里的文件都是X1,、X2…X51,我有个的文件名字是X15.ass,用完以后变成[Yousei-raws] Soul Eater 14 [BDrip 1280x720 x264 FLAC].ass代码如下:

@echo off
set a=0
setlocal EnableDelayedExpansion
for %%n in (*.ass) do (
ren "%%n" "[Yousei-raws] Soul Eater !a! [BDrip 1280x720 x264 FLAC].ass"
set /A a+=1

如何才能让顺序变正确,顺便说一下,最后一个51变成了1.

我给出的代码:

@echo off
set a=100
setlocal EnableDelayedExpansion
for /f "delims=*" %%n in ('dir /b *.ass') do (
set /a a+=1
ren "%%n" "[Yousei-raws] Soul Eater !a:~-2! [BDrip 1280x720 x264 FLAC].ass"

简单解释:因为a的值,被初始化为0,所以第一个文件就是0,第二个是1,那么第15个就是14了。。。代码调换了下顺序,先给a+1,让重命名时a的值为1即可。

Ps:此处使用for+dir 的方式,效率虽然会低一点,但是出错率也降低了,容易懂!当然一样可以用for /r。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK