用批处理ren重命名有"!"(注意不是“!”)的文件时 显示命令语法不正确 怎么办?

 我来答
CHENGWENGJI
2012-08-03 · TA获得超过412个赞
知道小有建树答主
回答量:667
采纳率:66%
帮助的人:295万
展开全部
这里有两个问题:
1.用 findstr 搜索特殊字符时要这样写:findstr "\!" 像英文的句号也是 : findstr "\."
2.在用了延迟变量后!会被全面屏蔽 目前我只知道能这样用 !var!
你试试这个:
@echo off & setlocal enabledelayedexpansion
echo !!!
echo 注意后面的叹号!!!
echo 注意后面的叹号!!!
pause

@echo off
dir /b *.ass >1.txt
for /f "tokens=* delims= " %%i in (1.txt) do (setlocal disabledelayedexpansion
echo %%i | findstr "\!" && (setlocal enabledelayedexpansion
echo "%%i" 你看,文件名里的叹号没有了。。。
echo 后面的代码你自己加,我不知道你改文件名的规律... ))
pause
能追加点分么,手打不容易啊...
更多追问追答
追问
本人菜鸟 你这个好像是吧文件名打印在1.txt里了 然后在1.txt里显示
但是怎么把弄好的文件名ren给原来的文件呢?
我想弄个把Asobi ni Iku yo! 01 [BDrip 1920x1080 x264 FLAC][F71736B7].sc.ass
之类的(叹号后面的数字是变化的几十个文件 最后一串“乱码”[F71736B7]每个文件不一样)
改成[Asobi ni Iku yo!][BDRIP][01][AVC_AAC_720P].ass这种没“乱码”的(有也行 但是要一致太难了)数字对应的文件
完成必追分
追答
Asobi ni Iku yo! 01 [BDrip 1920x1080 x264 FLAC][F71736B7].sc.ass

[Asobi ni Iku yo!][BDRIP][01][AVC_AAC_720P].ass

我不知道其他的文件名形式,所以自己看着更改一下就行...
下面的代码能将:
XX文件名XX! ?? [XXXX][XXXX].SC.ASS
改为:
[XX文件名XX!][BDRIP][ ?? ][AVC_AAC_720P].ASS
其中有个BUG就是:
当有两个:“XX文件名XX! ??”部分相同的文件时,不会对其修改

@echo off & setlocal disabledelayedexpansion & mode con cols=100 lines=100 & color 2
:load
SET NUM=0
:WORK1
dir /b *.sc.ass >_TEMP.TXT
TYPE _TEMP.TXT >TEMP.TXT
for /f "tokens=1* delims= " %%i in (TEMP.TXT) do (echo %%i | findstr "\!" && (ECHO %%i>>_TEMP.TXT))
MOVE _TEMP.TXT TEMP.TXT
:WORK2
for /f "tokens=1-10,11 delims=![]" %%a in (TEMP.TXT) do (SET /a NUM+=1
ECHO 正更改%%a %%b %%c %%d %%e ...
REN "%%a!%%b[%%c][%%d]%%e" "[%%a!][BDRIP][%%b][AVC_AAC_720P].ass")
:END
ECHO.
ECHO.
ECHO 共修改了%NUM%个文件...
DEL TEMP.TXT _TEMP.TXT
pause>NUL
:: A B C D E
::Asobi ni Iku yo! 01 [BDrip 1920x1080 x264 FLAC][F71736B7].sc.ass
::[Asobi ni Iku yo!][BDRIP][01][AVC_AAC_720P].ass
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hnsz2k
2012-08-02 · TA获得超过1582个赞
知道大有可为答主
回答量:1360
采纳率:100%
帮助的人:1453万
展开全部
经试验,批处理里面,下面的都可以:

for /f "delims=" %%f in ('dir /b *.txt ^| find "!"') do ren %%f %%~nf.doc
for /f "delims=" %%f in ('dir /b *!*.txt') do ren %%f %%~nf.doc
ren !*.doc !*.txt
ren *!*.txt *!*.doc

……
追问
试试这个
把:Asobi ni Iku yo! 01 .sc.ass
改为:[Asobi ni Iku yo][BDRIP][01][AVC_AAC_720P].ass
setlocal enabledelayedexpansion
for %%b in (*.ass) DO (
set "zhl=%%b"
set zhl=!zhl:Asobi ni Iku yo =!
set zhl=!zhl:~0,2!][AVC_AAC_720P].ass
set zhl=[Asobi ni Iku yo][BDRIP][!zhl!
set zhl
ren "%%b" "!zhl!"
)
长度有限发的不全
哪错了?
把原文件名中的!删掉才可以使用
追答
也没搞清楚。建议到无忧论坛问一下,那里高手较多。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式