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

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

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

求助
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
莫求昨天无悔,但愿今日无愧。

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

TOP

回复 8# Hello123World


    你误会我的意思了,我想要的  是把"01"字符串转换成可以计算的数值。   所以我才在set 上加了/a。 但是他只能读到八进制。
莫求昨天无悔,但愿今日无愧。

TOP

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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

  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,依次类推……
1

评分人数

    • CrLf: 乐于助人PB + 5

TOP

回复 6# sxw


    问题不是不能定义变量,而是只能处理到07.txt。
08.txt处理不了
莫求昨天无悔,但愿今日无愧。

TOP

是set a=%%~ni吧?set /a是计算求值表达式啊,,这里不是设置变量吗?
1

评分人数

    • CrLf: 乐于助人PB + 3

TOP

回复 2# ArdentMan


    不能理解set!  能不能讲解一下、
莫求昨天无悔,但愿今日无愧。

TOP

回复 3# else


    貌似你改了你这段话不行哦。
莫求昨天无悔,但愿今日无愧。

TOP

改为Set /A a=0x%%~ni
1

评分人数

    • CrLf: 乐于助人PB + 3
一路飘过的鸟~~~

TOP

返回列表