Board logo

标题: [文件操作] [已解决] 批处理重命名文件时为何提示数字常数错误? [打印本页]

作者: guaiwu    时间: 2011-8-25 11:54     标题: [已解决] 批处理重命名文件时为何提示数字常数错误?

本帖最后由 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)。
存在一个重名文件,或是找不到文件。
请按任意键继续. . .

求助
作者: ArdentMan    时间: 2011-8-25 11:57

改为Set /A a=0x%%~ni
作者: guaiwu    时间: 2011-8-25 12:58

回复 3# else


    貌似你改了你这段话不行哦。
作者: guaiwu    时间: 2011-8-25 12:59

回复 2# ArdentMan


    不能理解set!  能不能讲解一下、
作者: sxw    时间: 2011-8-25 13:04

是set a=%%~ni吧?set /a是计算求值表达式啊,,这里不是设置变量吗?
作者: guaiwu    时间: 2011-8-25 13:25

回复 6# sxw


    问题不是不能定义变量,而是只能处理到07.txt。
08.txt处理不了
作者: Hello123World    时间: 2011-8-25 13:34

  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,依次类推……
作者: 545810831    时间: 2011-8-25 16:36

他的意思是不要数字开头为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
复制代码

作者: guaiwu    时间: 2011-8-26 13:15

回复 8# Hello123World


    你误会我的意思了,我想要的  是把"01"字符串转换成可以计算的数值。   所以我才在set 上加了/a。 但是他只能读到八进制。
作者: CUer    时间: 2011-8-30 17:19

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





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