找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29522|回复: 10

[文件操作] [已解决] 批处理重命名文件时为何提示数字常数错误?

[复制链接]
发表于 2011-8-25 11:54:34 | 显示全部楼层 |阅读模式
本帖最后由 guaiwu 于 2011-8-30 15:04 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir *.txt /b /o:n') do (
  4. set /a a=%%~ni
  5. rename %%i !a!.txt
  6. )
  7. pause
复制代码
在这个bat文件的当前文件我有9个txt
分别是:01.txt、02.txt、03.txt、04.txt、05.txt、06.txt、07.txt、08.txt、09.txt
我试过了,为什么set /a a=%%~ni到了08.txt文件就不执行,报错了

无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
存在一个重名文件,或是找不到文件。
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
存在一个重名文件,或是找不到文件。
请按任意键继续. . .

求助

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-25 11:57:58 | 显示全部楼层
改为Set /A a=0x%%~ni

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

 楼主| 发表于 2011-8-25 12:58:31 | 显示全部楼层
回复 3# else


    貌似你改了你这段话不行哦。
 楼主| 发表于 2011-8-25 12:59:23 | 显示全部楼层
回复 2# ArdentMan


    不能理解set!  能不能讲解一下、
发表于 2011-8-25 13:04:27 | 显示全部楼层
是set a=%%~ni吧?set /a是计算求值表达式啊,,这里不是设置变量吗?

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

 楼主| 发表于 2011-8-25 13:25:54 | 显示全部楼层
回复 6# sxw


    问题不是不能定义变量,而是只能处理到07.txt。
08.txt处理不了
发表于 2011-8-25 13:34:01 | 显示全部楼层
  1. set /a a=%%~ni
复制代码
对变量赋值直接用set即可,不用加/a 参数。

Set /a 对于以0开头的数字,视之为8进制数。
  1. @Echo Off
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('dir *.txt /b /o:n') do (
  5. set  a=%%~ni
  6. rename %%i !a!.txt
  7. )
  8. Pause>Nul

复制代码
你的代码逻辑上也有错误,如同把 01.txt 重命名为01.txt,依次类推……

评分

参与人数 1PB +5 收起 理由
CrLf + 5 乐于助人

查看全部评分

发表于 2011-8-25 16:36:13 | 显示全部楼层
他的意思是不要数字开头为0文件名
  1. @Echo Off
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('dir *.txt /b /o:n') do (
  5. set  a=%%~ni
  6. set a=!a:~1!
  7. rename %%i !a!.txt
  8. )
  9. Pause>Nul
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-8-26 13:15:21 | 显示全部楼层
回复 8# Hello123World


    你误会我的意思了,我想要的  是把"01"字符串转换成可以计算的数值。   所以我才在set 上加了/a。 但是他只能读到八进制。
发表于 2011-8-30 17:19:43 | 显示全部楼层
回复 10# guaiwu
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir /b /o:n *.txt') do (
  4.     set /a a=1%%~ni%%10
  5.     ren %%i !a!.txt
  6. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:17 , Processed in 0.021998 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表