Board logo

标题: [文件操作] 【已解决】_批处理命令ren执行时遇到感叹号时报错如何解决呢? [打印本页]

作者: xzwcn    时间: 2013-9-3 10:05     标题: 【已解决】_批处理命令ren执行时遇到感叹号时报错如何解决呢?

本帖最后由 xzwcn 于 2013-9-3 13:36 编辑

命令执行时遇到“!”号时,报【命令语法不正确】如何解决呢?

代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. 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

  1. @echo off
  2. set n=0
  3. for /f "tokens=*" %%a in ('dir /b /ad') do (
  4.     set /a n+=1
  5.     call ren "%%~a" "%%n%%.%%~a"
  6. )
复制代码

作者: 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
  1. @echo off
  2. set n=10000
  3. for /f "tokens=*" %%a in ('dir /b /ad') do (
  4.     set /a n+=1
  5.     call ren "%%~a" "%%n:~-2%%.%%~a"
  6. )
复制代码

作者: Lumiere    时间: 2013-9-3 13:26

回复 3# xzwcn
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "tokens=*" %%a in ('dir /b /ad') do (
  4.     set /a n+=1
  5.     set /a m=!n!/10
  6.     if !m!==0 ren "%%~a" "0!m!.%%~a" else ren "%%~a" "!m!.%%~a"
  7. )
  8. endlocal
  9. 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文本里,用下面这代码试下看。
  1. @echo off
  2. set /a n=0
  3. for /f %%a in (1.txt) do (
  4. set /a n+=1
  5. call md %%n%%%%a
  6. )
  7. 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://www.bathome.net/) Powered by Discuz! 7.2