Board logo

标题: [文件操作] 批处理重命名文件名带空格的文件报错“命令语法不正确”如何解决 [打印本页]

作者: kingerpk    时间: 2009-2-4 22:10     标题: 批处理重命名文件名带空格的文件报错“命令语法不正确”如何解决

本帖最后由 pcl_test 于 2016-8-4 12:29 编辑

我在e:\1下建了 :
新建 文本文档.txt     
新建 文本文档(2).txt     
新建 文本文档(3).txt     
新建 文本文档(4).txt
几个文本文件,想用批处对其改名,
  1. for /f "delims=" %%a in ('dir/b e:\1') do (
  2. set b=%%a
  3. set c=!b:~3,4!
  4. ren %%a !c!
  5. )
  6. pause
复制代码
但其运行结果却是:
命令语法不正确。
请按任意键继续. . .

为什么 啊~~~~~
是不是因为有空格的原因?
要怎么改进?请大家指点指点!!谢谢!!!

[ 本帖最后由 kingerpk 于 2009-2-4 22:13 编辑 ]
作者: yslyxqysl    时间: 2009-2-4 22:17

http://www.bathome.net/thread-3222-1-4.html
作者: kingerpk    时间: 2009-2-4 23:05

还有问题~~~~~~~~~~~
文件:论坛发帖规则 - 论坛总版规 - 批处理之家 批处理,bat,dos教程,论坛,代码 - Powered by Discuz!.txt
我用以下代码进行改名:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir/b E:\临时文件夹\2\*.txt') do (
  4. set b=%%a
  5. set c=!b:批处理之家 批处理,bat,dos教程,论坛,代码 - Powered by Discuz=批处理之家!
  6. ren "%%a" "!c!"
  7. )
  8. pause
复制代码
但是结果和前面一样啊~~~~~
为什么~~~~~

还有若把ren "%%a" "!c!"  中的%%a改为!b!
结果就是“系统找不到指定的文件。”
这又是为什么啊  我都快把机试爆了!!!!
作者: Batcher    时间: 2009-2-5 09:37     标题: 回复 3楼 的帖子

先给dir命令加个/s开关再说
作者: kingerpk    时间: 2009-2-5 12:03     标题: 回复 4楼 的帖子

结果还是一样————
————“命令语法不正确。”

为什么?
作者: pusofalse    时间: 2009-2-5 17:54

当然出错,你的文件名中有叹号,预处理时丢掉了。。
  1. @echo Off
  2. For /f "delims=" %%a in ('dir/b E:\临时文件夹\2\*.txt') do (
  3.         set "fileName=%%a"
  4.         setlocal EnableDelayedExpansion
  5.         set "newFile=!fileName:批处理之家 批处理,bat,dos教程,论坛,代码 - Powered by Discuz=批处理之家!"
  6.         ren "%%~a" "!newFile!"
  7.         endLocal
  8. )
  9. Pause>nul
复制代码

作者: kingerpk    时间: 2009-2-5 19:59     标题: 回复 6楼 的帖子

老天~~~还是
“命令语法不正确。”到底是哪里出错了?
大虾们,快发威吧!!!!


ren "%%~a" "!newFile!"

"%%~a"是什么意思?

[ 本帖最后由 kingerpk 于 2009-2-5 20:02 编辑 ]
作者: pusofalse    时间: 2009-2-5 20:29     标题: 回复 7楼 的帖子

把@echo Off 去掉,把结果贴出来看下。。
作者: kingerpk    时间: 2009-2-5 20:44     标题: 回复 8楼 的帖子

结果:
E:\临时文件夹\2>For /F "delims=" %a in ('dir/b E:\临时文件夹\2\*.txt') do (
set "fileName=%a"
setlocal EnableDelayedExpansion
set "newFile=!fileName:批处理之家 批处理,bat,dos教程,论坛,代码 - Powered by Dis
cuz=批处理之家!"
ren "%~a" "!newFile!"
endLocal
)

E:\临时文件夹\2>(
set "fileName=论坛发帖规则 - 论坛总版规 - 批处理之家 批处理,bat,dos教程,论坛,代
码 - Powered by Discuz!.txt"
setlocal EnableDelayedExpansion
set "newFile=!fileName:批处理之家 批处理,bat,dos教程,论坛,代码 - Powered by Dis
cuz=批处理之家!"
ren "论坛发帖规则 - 论坛总版规 - 批处理之家 批处理,bat,dos教程,论坛,代码 - Powe
red by Discuz!.txt" "!newFile!"
endLocal
)
命令语法不正确。

E:\临时文件夹\2>Pause1>nul
作者: pusofalse    时间: 2009-2-5 22:15     标题: 回复 9楼 的帖子

还是叹号的问题,试下这样呢?
  1. @echo Off
  2. For /f "delims=" %%a in ('dir /b E:\临时文件夹\2\*.txt') do (
  3.        set "fileName=%%a"
  4.        setlocal EnableDelayedExpansion
  5.        set "newFile=!fileName:论坛发帖规则 - 论坛总版规 - 批处理之家 批处理,bat,dos教程,论坛,代码 - Powered by Discuz=批处理之家!"
  6.        ren "!fileName!" "!newFile:^!=^^!!"
  7.        endLocal
  8. )
  9. Pause
复制代码

作者: kingerpk    时间: 2009-2-6 00:19

具体原理是什么?
"!newFile:^!=^^!!"
是什么意思?
作者: pusofalse    时间: 2009-2-6 01:26     标题: 回复 11楼 的帖子

对!进行转义,^是转义符。 跟变量延迟的特性有关,具体请搜索 "变量延迟"。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2