有没有办法简单地增加文件名中的数字?
文件名不同,但数字总是在同一个地方。
就像这样:
Chrome - Browsing 23 - Crash Report
Chrome - Browsing 24 - Navigation
因此,应该很容易分辨数字的位置,因为它总是位于完全相同的位置,只有更改后的文本。
我偶然在许多文件上输错了数字,复制了一个数字,所以所有数字都返回1,并且需要很长时间才能保留它们。
有没有办法用批处理脚本执行此操作?
或者类似的东西?
由于
答案 0 :(得分:1)
这是可能的。
给出两个文件
Chrome - Browsing 23 - Crash Report
Chrome - Browsing 24 - Navigation
并将此脚本另存为test.bat
setlocal ENABLEDELAYEDEXPANSION
@echo off
for %%f in ("Chrome - Browsing*") do (
set TEMP_FILENAME=%%f
set TEMP_NUM=!TEMP_FILENAME:~17,4!
set /A TEMP_NUM2=!TEMP_NUM!+1
echo ren "!TEMP_FILENAME:~0,17!!TEMP_NUM!!TEMP_FILENAME:~21!" "!TEMP_FILENAME:~0,17! !TEMP_NUM2! !TEMP_FILENAME:~21!"
)
你得到的是重命名说明:
ren "Chrome - Browsing 23 - Crash Report" "Chrome - Browsing 24 - Crash Report"
ren "Chrome - Browsing 24 - Navigation" "Chrome - Browsing 25 - Navigation"
如果您将echo ren
更改为ren
,它将实际运行命令。首先进行备份,如果数字达到三位数或一位数,或者间距不同等,它可能会中断。
答案 1 :(得分:1)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
:: This is just a listing for demonstration purposes
DIR "%sourcedir%\Chrome - Browsing *"
FOR /L %%a IN (102,-1,95) DO (
FOR /f "tokens=4*" %%g IN (
'dir /b /a-d "%sourcedir%\Chrome - Browsing %%a*" '
) DO (
SET /a newnum=1+%%a
ECHO(REN "%sourcedir%\Chrome - Browsing %%a*" "Chrome - Browsing !newnum! %%h"
)
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
为了测试目的,所需的REN命令仅为ECHO
。 在您确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
这是一个测试运行结果;首先是dir
列表,然后生成rename
:
Volume in drive U has no label.
Volume Serial Number is 0460-0000
Directory of U:\sourcedir
16/07/2014 14:25 0 Chrome - Browsing 95 - Crash Report
16/07/2014 14:25 0 Chrome - Browsing 97 - Crash Report
16/07/2014 14:25 0 Chrome - Browsing 99 - Crash Report
16/07/2014 14:25 0 Chrome - Browsing 101 - Crash Report
16/07/2014 14:25 0 Chrome - Browsing 96 - Navigation
16/07/2014 14:25 0 Chrome - Browsing 98 - Navigation
16/07/2014 14:25 0 Chrome - Browsing 100 - Navigation
16/07/2014 14:25 0 Chrome - Browsing 102 - Navigation
8 File(s) 0 bytes
0 Dir(s) 2,139,062,272 bytes free
REN "U:\sourcedir\Chrome - Browsing 102*" "Chrome - Browsing 103 - Navigation"
REN "U:\sourcedir\Chrome - Browsing 101*" "Chrome - Browsing 102 - Crash Report"
REN "U:\sourcedir\Chrome - Browsing 100*" "Chrome - Browsing 101 - Navigation"
REN "U:\sourcedir\Chrome - Browsing 99*" "Chrome - Browsing 100 - Crash Report"
REN "U:\sourcedir\Chrome - Browsing 98*" "Chrome - Browsing 99 - Navigation"
REN "U:\sourcedir\Chrome - Browsing 97*" "Chrome - Browsing 98 - Crash Report"
REN "U:\sourcedir\Chrome - Browsing 96*" "Chrome - Browsing 97 - Navigation"
REN "U:\sourcedir\Chrome - Browsing 95*" "Chrome - Browsing 96 - Crash Report"
诀窍是以反向数字顺序执行重命名(102
和95
需要更改以适应您要重新编号的范围,显然) 。如果按正常顺序尝试重命名,则可能具有该情况
16/07/2014 14:25 0 Chrome - Browsing 98 - Navigation
16/07/2014 14:25 0 Chrome - Browsing 99 - Navigation
会产生(增加制度)
REN "U:\sourcedir\Chrome - Browsing 98*" "Chrome - Browsing 99 - Navigation"
REN "U:\sourcedir\Chrome - Browsing 99*" "Chrome - Browsing 100 - Navigation"
显然,第一次重命名(98)将失败,因为目标名称(99)已经存在。
编辑:适应一般情况(字数更多字)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "pattern=word word - word word"
:: This is just a listing for demonstration purposes
DIR "%sourcedir%\%pattern%*"
:: De-luxe enhancement : automatically determine # of words in pattern (+1)
IF NOT "%pattern:~-1%"==" " SET "pattern=%pattern% "
SET /a words=1
SET "nwords=%pattern%"
:adwpl
SET /a words+=1
SET "nwords=%nwords:* =%"
IF DEFINED nwords GOTO adwpl
FOR /L %%a IN (102,-1,95) DO (
FOR /f "tokens=%words%*" %%g IN (
'dir /b /a-d "%sourcedir%\%pattern%%%a*" '
) DO (
SET /a newnum=1+%%a
ECHO(REN "%sourcedir%\%pattern%%%a*" "%pattern%!newnum! %%h"
)
)
GOTO :EOF
现在做大多数模式......只需设置你的模式。
答案 2 :(得分:0)
在我的freebsd系统上,它就是这个。我假设它也可以在debian linux上运行。 它是一个小脚本,它不仅可以让你增加,而且可以用另一个数字添加/减去文件名中的任何数字。
renumber.sh
#!/bin/bash
find * -name "*$1*" -print0 | while IFS= read -r -d '' file; do
filename=$(basename "$file")
extension=${filename##*.}
filename=${filename%.*}
num=$(echo "$filename" | sed "s/.*$2\([0-9]*\)$3.*/\1/")
firstpart=$(echo "$filename" | sed "s/\(.*$2\)$num.*/\1/")
lastpart=$(echo "$filename" | sed "s/.*$num\($3.*\)/\1/")
addednum=$4
changednum=$((num+addednum))
echo "$num --> $changednum --> $firstpart$changednum$lastpart.$extension"
mv -i "$filename.$extension" "$firstpart$changednum$lastpart.$extension"
done
现在命令语法是
renumber.sh contAINS before after -20
参数1(此处" contAINS")将文件限制为包含此字符串的文件。你可以使用一个空字符串""在这里得到他们所有。
参数2(此处"之前")是数字前面的前缀或字符串。也可以使用""
将其设置为空参数3(此处""之后)是后缀,紧跟在数字后面。使用""设置为空。
参数4(此处" -20")是要添加的数字。
当我在包含以下文件的文件夹中运行
时EddycontAINS5678blablabefore120afterbla2345.txt
TomcontAINS1000_before121afterbla.txt
contAINS_12_before21after.txt
100before34aftercontAINS.app
它会将文件更改为
EddycontAINS5678blablabefore100afterbla2345.txt
TomcontAINS1000_before101afterbla.txt
contAINS_12_before1after.txt
100before14aftercontAINS.app