Zhaofeiyan 发表于 2023-7-8 19:14

批处理中“前”的命令到底出现了什么错误?

本帖最后由 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

shiquda 发表于 2023-7-8 19:41


for /f "delims=" %%a in ('dir /b') do (
    set "$=%%a"
    setlocal enabledelayedexpansion
    for /f "delims=后" %%b in ("!$!") do (
      if not "%%b"=="!$!" (
            ren "!$!" "%%b"
      )
    )
    endlocal
)

hrh123 发表于 2023-7-8 20:16

将“后”改成“^后”:
for %%b in (^后) do (

Zhaofeiyan 发表于 2023-7-8 20:34

shiquda 发表于 2023-7-8 19:41
for /f "delims=" %%a in ('dir /b') do (
    set "$=%%a"
    setlocal enab ...

正如“请注意”上一行所言 修改后的代码只能删去“后”到结尾(“后”到结尾恰恰相反,是要留下来的),而不能删除从“后”到“前”这一部分。

Zhaofeiyan 发表于 2023-7-8 20:50

hrh123 发表于 2023-7-8 20:16
将“后”改成“^后”:

删去了“后”之后的括号,并将“后”移到了前括号内,但运行结果与原代码一样。

hrh123 发表于 2023-7-8 20:56

Zhaofeiyan 发表于 2023-7-8 20:50
删去了“后”之后的括号,并将“后”移到了前括号内,但运行结果与原代码一样。

试试把`(前"`改成`(^前"`?

jyjjf 发表于 2023-7-8 23:26

ai说得对,^符号用于转义字母,bat又不支持正则表达式,除非你用支持正则的文本替换的支持命令行的命令。

平淡最真 发表于 2023-7-9 02:23

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:27

平淡最真 发表于 2023-7-9 02:23
dir /b后面加上*.后缀   可以有针对性一点
@echo off
for /f "tokens=1-3 delim ...

这个是适用于文件名中只有1一个前一个后的情况

v12608 发表于 2023-7-9 11:10

GPT就是牛
页: [1] 2 3
查看完整版本: 批处理中“前”的命令到底出现了什么错误?