[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】_批处理命令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-购物变得很方便                                                --------正常通过
"
1

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

我想着吧两句,这贴正是字符处理语言的悲哀,面向对象语言的长处。
%%a in ('dir /b /ad')----返回的是字符,要处理的也是字符
$a = dir file ------返回的是对象,要处理的也是对象.
而ren $a -newname xxx 这条powershell语句,a这里是对象,即可以不管a这个文件是啥名,都可以改名,
所以,powershell中根本不会出现这样的问题,也就不会有人问.

看来我应写个帖子 <<面向对象脚本之妙>> 说说哪妙
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 14# Lumiere


    我只是想知道5楼代码的目的是什么?它能解决楼主的问题吗?

TOP

回复 13# DAIC

我没说是要与原来的代码一样啊,你不是说怎么处理带感叹号的文件名么,如果达不到你要求你自己试着改动一下吧。
Still with wax

TOP

回复 12# Lumiere


    请问你是在搞笑么?这是5楼的代码么?

TOP

回复 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
复制代码
不知道是不是你想达到的目的。
Still with wax

TOP

回复 9# Lumiere


a!bcdefg
abcde!fg
abc!defg
a!bcdefg
abcdef!g
ab!cdefg
abcd!efg
a!!d!!fg
!a!!!!fg
!a!!!fg!
你试试这几个

TOP

楼主不说话 搞的你们两在对话啊

TOP

回复 8# DAIC


   你弄个例子出来啊, 你这么说谁能给你写代码啊
Still with wax

TOP

回复 7# Lumiere


    感叹号出现的位置不固定啊,怎么办?

TOP

回复 6# DAIC


    你把需要添加感叹号的地方标出来,或者你自己在代码里修改,在相应的文件名字处添加^^!这三个字符
Still with wax

TOP

回复 5# Lumiere


    这样能处理文件夹名字包含感叹号的情况吗?

TOP

回复 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
复制代码
Still with wax

TOP

回复 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. )
复制代码
1

评分人数

TOP

DAIC 发表于 2013-9-3 10:58


谢谢!如果开始是从01,02,03....09,而不是1,2,3...9,要怎样修改呢?

TOP

返回列表