批处理中“前”的命令到底出现了什么错误?
本帖最后由 Zhaofeiyan 于 2023-7-9 19:26 编辑这个批处理是想实现将文件名从“前”到“后”一段字府删去的目的,但运行后“后”前面全删去了,问题出在哪儿?
举例:更上前科幻1电影好D后一层楼,想变成:更上一层楼,结果是:一层楼
for /f "delims=" %%a in ('dir/b') do (
set $=%%a
setlocal enabledelayedexpansion
for %%b in (^) 后) do (
if "!$:*%%b=!" NEQ "%%~xa" (
if "!$:*%%b=!" NEQ "!$!" ren "!$!" "!$:*%%b=!"
) else (
for /f "delims=(前" %%c in ("!$!") do (
ren "!$!" "%%c%%~xa"
)
)
)
endlocal
)
pause
for /f "delims=" %%a in ('dir /b') do (
set "$=%%a"
setlocal enabledelayedexpansion
for /f "delims=后" %%b in ("!$!") do (
if not "%%b"=="!$!" (
ren "!$!" "%%b"
)
)
endlocal
)
将“后”改成“^后”:
for %%b in (^后) do ( shiquda 发表于 2023-7-8 19:41
for /f "delims=" %%a in ('dir /b') do (
set "$=%%a"
setlocal enab ...
正如“请注意”上一行所言 修改后的代码只能删去“后”到结尾(“后”到结尾恰恰相反,是要留下来的),而不能删除从“后”到“前”这一部分。 hrh123 发表于 2023-7-8 20:16
将“后”改成“^后”:
删去了“后”之后的括号,并将“后”移到了前括号内,但运行结果与原代码一样。 Zhaofeiyan 发表于 2023-7-8 20:50
删去了“后”之后的括号,并将“后”移到了前括号内,但运行结果与原代码一样。
试试把`(前"`改成`(^前"`? ai说得对,^符号用于转义字母,bat又不支持正则表达式,除非你用支持正则的文本替换的支持命令行的命令。 dir /b后面加上*.后缀 可以有针对性一点
@echo off
for /f "tokens=1-3 delims=前后" %%a in ('dir /b') do (
ren %%a前%%b后%%c %%a%%c
)
pause 平淡最真 发表于 2023-7-9 02:23
dir /b后面加上*.后缀 可以有针对性一点
@echo off
for /f "tokens=1-3 delim ...
这个是适用于文件名中只有1一个前一个后的情况 GPT就是牛