如何能通过Bat代码去掉后缀数字括号,并在数字前默认添加一个横杠“-”? 50

请求编程大神支招,如何能通过Bat代码去掉后缀数字括号,并在数字前添加一个“-”,最终效果参考下图“BAT后”... 请求编程大神支招,如何能通过Bat代码去掉后缀数字括号,并在数字前添加一个“-”,最终效果参考下图“BAT后” 展开
 我来答
动组神洁1j
2023-05-06 · 超过89用户采纳过TA的回答
知道小有建树答主
回答量:753
采纳率:100%
帮助的人:10.3万
展开全部
以下是一个实现的示例:
复制代码@echo offsetlocal enabledelayedexpansionfor %%a in (*(*)) do ( set "filename=%%~na"
rem 去掉括号及句点之后的数字部分
for /f "tokens=1 delims=(" %%b in ("!filename!") do set "filename=%%b" for /f "tokens=* delims=.0123456789" %%b in ("!filename!") do set "filename=!filename!%%b"
rem 在数字前添加横杠
set "newname=!filename!" for /f "tokens=1* delims=0123456789" %%b in ("!filename!") do ( if not "%%c"=="" set "newname=%%b-%%c"
)
rem 重命名文件
if not "!newname!"=="!filename!" ren "%%~fa" "!newname!%%~xa"
)echo Done.

基本思路:使用循环来遍历所有括号和数字相间且带有后缀的文件名,然后针对每个文件名分别进行修改。对于每个文件名,通过借助set命令和字符处理功能来去掉字符串中的括号和数字,并添加横杠。最后,使用ren命令将文件重命名为新的文件名。请注意,在运行此代码之前应该先备份数据,以防止错误操作导致不可逆的数据损失。
甲丁山人
2023-05-29 · 超过32用户采纳过TA的回答
知道答主
回答量:144
采纳率:83%
帮助的人:2.9万
展开全部
你可以尝试使用如下代码:
```
@echo off
setlocal enabledelayedexpansion
for %%f in (*.*) do (
set "filename=%%~nf"

rem 利用正则表达式替换数字括号为空格
set "filename=!filename:[0-9][(][0-9][)]:=!"

rem 加入横杠
set "newname=-!filename!",

ren "%%f" "!newname!"
)
echo "All files successfully renamed!"
```
这个Bat脚本中,先设置变量 `filename` 来保存文件名(不带扩展名)。然后使用一条比较复杂的字符串替换命令,将文件名中的数字括号(如`(1)`)及其前面的数字都替换为空格。接着在文件名前加上横杠,最后用 `ren` 命令来重命名文件。其中 `!filename!` 和 `!newname!` 都是使用了开启了delayedexpansion的方式的不同形式。
你只需要把这个代码复制到文本编辑器中,并将文件另存为“rename.bat”,然后放在需要批量修改文件名的文件夹中运行即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qop_dob
2024-03-09 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:79%
帮助的人:3873万
展开全部
不清楚你的实际文件/情况,仅以问题中的样例/说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI/GB2312,跟要处理的多个文件放一起双击运行
<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 将当前目录里的多个文件名称末尾的小括号改成横杠
path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
set #=Any questions&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "self=%~f0"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$b=[Convert]::FromBase64String("IC0tPiA=");
$c=[Text.Encoding]::Default.GetString($b);
$self=get-item -literal $env:self;
$current=$self.Directory.FullName.trimend('\');
$files=@(dir -literal $current|?{($self.Name -ne $_.Name) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
    $base=[regex]::replace($files[$i].BaseName, '\s*[((]([^(\(\))]+?)[))]\s*?$', {
        param($z);
        return ('-'+$z.groups[1].value);
    });
    $files[$i].Name+$c+$prefix+$base+$files[$i].Extension;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式