标题: [文件操作] 【已解决】_批处理命令ren执行时遇到感叹号时报错如何解决呢? [打印本页]
作者: xzwcn 时间: 2013-9-3 10:05 标题: 【已解决】_批处理命令ren执行时遇到感叹号时报错如何解决呢?
本帖最后由 xzwcn 于 2013-9-3 13:36 编辑
命令执行时遇到“!”号时,报【命令语法不正确】如何解决呢?
代码:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ('dir /b /ad') do set/a n+=1&ren "%%~a" "!n!.%%~a"
复制代码
可以实现如下功能:
如一文件夹1里面有文件或文件夹:
A
B
C
D
.
.
.
Z
运行后达到改名为:
1.A
2.B
3.C
4.D
.
.
.
n.Z
【前提】:文件夹名中不能包含“!”号,否则报错。如下:
J:\englishNew\2\《新概念英语》第2册-听力强化·美>set/a n+=1 & ren "第29课-Tax
i!-出租汽车!" "!n!.第29课-Taxi!-出租汽车!"
命令语法不正确。 --------有!号,出错。
J:\englishNew\2\《新概念英语》第2册-听力强化·美>set/a n+=1 & ren "第30课-Foo
tball or Polo?-足球还是水球?" "!n!.第30课-Football or Polo?-足球还是水球? --------正常通过
"
J:\englishNew\2\《新概念英语》第2册-听力强化·美>set/a n+=1 & ren "第31课-Suc
cess Story-成功者的故事" "!n!.第31课-Success Story-成功者的故事" --------正常通过
J:\englishNew\2\《新概念英语》第2册-听力强化·美>set/a n+=1 & ren "第32课-Sho
pping Made Easy-购物变得很方便" "!n!.第32课-Shopping Made Easy-购物变得很方便 --------正常通过
"
作者: DAIC 时间: 2013-9-3 10:58
- @echo off
- set n=0
- for /f "tokens=*" %%a in ('dir /b /ad') do (
- set /a n+=1
- call ren "%%~a" "%%n%%.%%~a"
- )
复制代码
作者: xzwcn 时间: 2013-9-3 11:19
DAIC 发表于 2013-9-3 10:58
谢谢!如果开始是从01,02,03....09,而不是1,2,3...9,要怎样修改呢?
作者: DAIC 时间: 2013-9-3 11:45
回复 3# xzwcn - @echo off
- set n=10000
- for /f "tokens=*" %%a in ('dir /b /ad') do (
- set /a n+=1
- call ren "%%~a" "%%n:~-2%%.%%~a"
- )
复制代码
作者: Lumiere 时间: 2013-9-3 13:26
回复 3# xzwcn - @echo off&setlocal enabledelayedexpansion
- set n=0
- for /f "tokens=*" %%a in ('dir /b /ad') do (
- set /a n+=1
- set /a m=!n!/10
- if !m!==0 ren "%%~a" "0!m!.%%~a" else ren "%%~a" "!m!.%%~a"
- )
- endlocal
- pause
复制代码
作者: DAIC 时间: 2013-9-3 14:41
回复 5# Lumiere
这样能处理文件夹名字包含感叹号的情况吗?
作者: Lumiere 时间: 2013-9-3 15:26
回复 6# DAIC
你把需要添加感叹号的地方标出来,或者你自己在代码里修改,在相应的文件名字处添加^^!这三个字符
作者: DAIC 时间: 2013-9-3 16:13
回复 7# Lumiere
感叹号出现的位置不固定啊,怎么办?
作者: Lumiere 时间: 2013-9-3 20:25
回复 8# DAIC
你弄个例子出来啊, 你这么说谁能给你写代码啊
作者: terse 时间: 2013-9-3 20:39
楼主不说话 搞的你们两在对话啊
作者: DAIC 时间: 2013-9-3 22:55
回复 9# Lumiere
a!bcdefg
abcde!fg
abc!defg
a!bcdefg
abcdef!g
ab!cdefg
abcd!efg
a!!d!!fg
!a!!!!fg
!a!!!fg!
你试试这几个
作者: Lumiere 时间: 2013-9-4 18:30
回复 11# DAIC
把你那一串带有感叹号的文字复制到1.txt文本里,用下面这代码试下看。- @echo off
- set /a n=0
- for /f %%a in (1.txt) do (
- set /a n+=1
- call md %%n%%%%a
- )
- pause
复制代码
不知道是不是你想达到的目的。
作者: DAIC 时间: 2013-9-4 19:22
回复 12# Lumiere
请问你是在搞笑么?这是5楼的代码么?
作者: Lumiere 时间: 2013-9-4 20:31
回复 13# DAIC
我没说是要与原来的代码一样啊,你不是说怎么处理带感叹号的文件名么,如果达不到你要求你自己试着改动一下吧。
作者: DAIC 时间: 2013-9-4 21:50
回复 14# Lumiere
我只是想知道5楼代码的目的是什么?它能解决楼主的问题吗?
作者: PowerShell 时间: 2013-9-5 08:45
我想着吧两句,这贴正是字符处理语言的悲哀,面向对象语言的长处。
%%a in ('dir /b /ad')----返回的是字符,要处理的也是字符
$a = dir file ------返回的是对象,要处理的也是对象.
而ren $a -newname xxx 这条powershell语句,a这里是对象,即可以不管a这个文件是啥名,都可以改名,
所以,powershell中根本不会出现这样的问题,也就不会有人问.
看来我应写个帖子 <<面向对象脚本之妙>> 说说哪妙
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |