
最近毕设需要,下了套教程。看图,发现里面讲义的顺序是乱的!81-30-4……这样。因为它是按第一个不同的字,“最新图片”-“资料”-这样的中文顺序排的,它真正的阿拉伯数字在后面的括号那边。。。于是,写一个批处理把阿拉伯数字调整到文件名前面来,这样它文件就会按照顺序排列,方便阅读。正好批处理好长时间没接触了,写下来帮助自己回忆。
在这个乱七的目录下面新建一个文件,叫“叫什么名字好呢.bat”或者“xxx.cmd”。
内容如下:
@echo off
setlocal enabledelayedexpansion
for %%i in (.\*.pdf) do (
set var=%%i
set t=!var:~-7,-5!
if "!t:~0,1!"=="(" (
echo terrible
set t=0!t:~1,1!
echo !t!
)
call :sub "%%i" %t%
)
:sub
set file=%~nx1
echo %1-->%t%%file%
ren "%~nx1" "%t%%file%"
goto :eof
set var=%%i
set t=!var:~-7,-5!
if "!t:~0,1!"=="(" (
echo terrible
set t=0!t:~1,1!
echo !t!
)
call :sub "%%i" %t%
)
:sub
set file=%~nx1
echo %1-->%t%%file%
ren "%~nx1" "%t%%file%"
goto :eof
pause
效果:
它终于按照1-2-3这样的顺序了,爽。
简要解释:
echo off
关闭回显,前面加个@关闭这句自身的回显,其实这句要不要无所谓,美观问题;
setlocal enabledelayedexpansion
设置变量延迟,这句话不知道也无所谓,等会儿说;
for %%i in (.\*.pdf) do (
基本for,在后面的小括号里的集合里面遍历文件;"."表示当前目录,".."表示上一级目录," * "通配符表示任意字符串,".\*.pdf"就表示当前目录下的所有PDF文件;也有其它写法,只不过我习惯了。%%i是循环变量,取到的文件名就放在这里面。
set var=%%i
set t=!var:~-7,-5!
第一句把%%i里的文件名放入var这个变量里面,名字随便取,以后要用到就用%var%或者!Var! 刚才第二句的变量延迟,可以粗略理解为“有小括号括起来的一组语句“就用,小括号里面的变量不用百分号而是感叹号包围起来,这样会立刻刷新该变量。
第二句把var里的倒数第7个字符到倒数第5个取出来放到t里面,下不含上含,比如%var%=="hi(20).txt",这样取一下就得到了"20 "
但是有一个问题,万一序号只有个位数比如%var%=="hi(2).txt",这样取出来就是"(2",少个数字多个左括号,所以接下来处理
if "!t:~0,1!"=="(" (
set t=0!t:~1,1!
)
把t 的第0个到第1个单独取出来,其实就是第一个字符。如果是左括号就换成0,比如刚才的"(2"就变成了"02"
call :sub "%%i"
调用子过程sub,sub名字可以随便取,和下面对应起来就行。把%%i作为第1参数传过去,到了这个子过程里分别变成了%1。要加引号是因为文件名里有空格啊。
:sub
。。。。。。
goto :eof
在省略号里补上sub的内容
set file=%~nx1
又来了一个变量,名字随便取,我叫file。刚才不是%%i这个文件名变成了%1么,其实不只是文件名,因为我还打了".\"啊。%~n1才是文件名,%~x1%是拓展名,%~nx1就是文件名加拓展名,它完整的名字。保存到file里面。
ren "%~nx1" "%t%%file%"
ren 是改名命令。第一个是原来的名字,第二个是新名字。加引号是因为文件名里有空格。 把t这个编号和原来的名字连起来。
好像还是有点问题,既然效果达到了,就算了吧~
效果:

它终于按照1-2-3这样的顺序了,爽。
简要解释:
echo off
关闭回显,前面加个@关闭这句自身的回显,其实这句要不要无所谓,美观问题;
setlocal enabledelayedexpansion
设置变量延迟,这句话不知道也无所谓,等会儿说;
for %%i in (.\*.pdf) do (
基本for,在后面的小括号里的集合里面遍历文件;"."表示当前目录,".."表示上一级目录," * "通配符表示任意字符串,".\*.pdf"就表示当前目录下的所有PDF文件;也有其它写法,只不过我习惯了。%%i是循环变量,取到的文件名就放在这里面。
set var=%%i
set t=!var:~-7,-5!
第一句把%%i里的文件名放入var这个变量里面,名字随便取,以后要用到就用%var%或者!Var! 刚才第二句的变量延迟,可以粗略理解为“有小括号括起来的一组语句“就用,小括号里面的变量不用百分号而是感叹号包围起来,这样会立刻刷新该变量。
第二句把var里的倒数第7个字符到倒数第5个取出来放到t里面,下不含上含,比如%var%=="hi(20).txt",这样取一下就得到了"20 "
但是有一个问题,万一序号只有个位数比如%var%=="hi(2).txt",这样取出来就是"(2",少个数字多个左括号,所以接下来处理
if "!t:~0,1!"=="(" (
set t=0!t:~1,1!
)
把t 的第0个到第1个单独取出来,其实就是第一个字符。如果是左括号就换成0,比如刚才的"(2"就变成了"02"
call :sub "%%i"
调用子过程sub,sub名字可以随便取,和下面对应起来就行。把%%i作为第1参数传过去,到了这个子过程里分别变成了%1。要加引号是因为文件名里有空格啊。
:sub
。。。。。。
goto :eof
在省略号里补上sub的内容
set file=%~nx1
又来了一个变量,名字随便取,我叫file。刚才不是%%i这个文件名变成了%1么,其实不只是文件名,因为我还打了".\"啊。%~n1才是文件名,%~x1%是拓展名,%~nx1就是文件名加拓展名,它完整的名字。保存到file里面。
ren "%~nx1" "%t%%file%"
ren 是改名命令。第一个是原来的名字,第二个是新名字。加引号是因为文件名里有空格。 把t这个编号和原来的名字连起来。
好像还是有点问题,既然效果达到了,就算了吧~