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

[文本处理] [已解决]批处理批量建立以数字命名的文本如何在文件名的数字前补零?

本帖最后由 pcl_test 于 2016-8-6 22:47 编辑

是这样的,我需要建立100个文本,那利用FOR就可以解决了。
  1. for /l %%i in (1,1,100) do echo.>%%i.txt
复制代码
现在问题是建立的文件前10个都是1.txt 2.txt 3.txt等,而我实际需要的却是01 02 03。
各种办法都想了,一直做不到。
希望各位大大指教
1

评分人数

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

经验:在for中解释%%a比读取变量耗时更多,建议能用变量代替就尽量避免
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,1000) do (
  3.      set /a "str+=100001"
  4.      cd.>!str:~-4!.txt
  5. )
  6. pause
复制代码

TOP

本帖最后由 caruko 于 2011-5-18 02:44 编辑

直接加上一个大数,然后取后几位。如下面 取 4位数, 0001 0002 0011 这种。 把 -4 改为 -2 即得到 01 02 这种数字
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,1000) do (
  3.      set /a "str=%%a+100000"
  4.      cd.>!str:~-4!.txt
  5. )
  6. pause
复制代码

TOP

改改程序还可以加个前辍,比如:文件001.txt,文件002.txt

最前面加句 set /p e=您的文件需要加什么前辍?

最后子程序那赋值那改成 set "dat=!e!!dat!%1"
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

直接把前面几个文件改名就行了……

TOP

本帖最后由 Bearxy 于 2011-5-13 17:29 编辑

12# mxxcgzxxx


测试完全OK,谢谢mxxcgzxxx! 也很感激bathome和其他几位的热心帮助!

TOP

8# Bearxy

对不起因为是在论坛里写的没有测试过,现在改正了一些语法错误可以用了!你再试试
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

10# wolonga123


迭代范围是1-99
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 wolonga123 于 2011-5-13 13:13 编辑

这样好像也行..不过思路差不多
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,100) do (
  3.      set "str=0%%a"
  4.      cd.>!str:~-2!.txt
  5. )
  6. pause
复制代码

TOP

5# Bearxy
纯属抄袭斑竹的..^-^
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1001,1,1100) do (
  3.      set "str=%%a"
  4.      cd.>!str:~-2!.txt
  5. )
复制代码

TOP

7# mxxcgzxxx
谢谢大大,测试的时候出现了一个此时不应有...我没看清楚.

这种思路,是不是用ren更快些?
比如
  1. @echo off
  2. set a=0
  3. :ks
  4. set/a a=%a%+1
  5. ren "%a%.txt" "0%a%.txt"
  6. if %a%==9 goto ok
  7. goto ks
  8. :ok
  9. echo 完成!
  10. pause
复制代码

TOP

本帖最后由 mxxcgzxxx 于 2011-5-13 20:35 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set p=0
  3. set /p a=起始文号,请用数字!:
  4. set /p b=终止文号,请用数字!:
  5. set /p c=文件后辍:四位以内的字符
  6. set /p d=需要补0的位数?如001为3,0001为4!:
  7. set /p e=你想什么前辍吗?:
  8. for /l  %%1 in (%a%,1,%b%) do (
  9.        call :补0 %%1 %d%
  10.        echo !dat!
  11.        cd.>!dat!.%c%
  12.        )
  13. echo :eof
  14. :补0
  15. :test
  16. set "var=%1"
  17. set len=0
  18. for /l %%x in (0,1,20) do (
  19.    set "var_=!var:~%%x,1!"
  20.    if "!var_!"=="" goto :b
  21.    set /a len+=1
  22.    )
  23. :b
  24. set /a kg=%2-%len%
  25. set "dat="
  26. if %kg% leq 0 set dat=%1 & goto :eof
  27. for /l %%x in (1,1,%kg%) do set "dat=!dat!%p%"
  28. set "dat=!e!!dat!%1"
  29. goto :eof
复制代码
1

评分人数

世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

4# batman
batman老大的代码也是一样,到9后面的值就为 010 011 012...  了。

TOP

本帖最后由 Bearxy 于 2011-5-13 12:28 编辑

3# wolonga123

这种办法我也试了.只怪我问题没说清楚,文件是本身存在的,我想用FOR来取文件名.

文件是01 02 03 04 05 06.txt
  1. FOR /L %%i in (1,1,100) do (xcopy "%%i.txt" "c:\%%i")
复制代码
但是实际上%%i的前9个值都是 1 2 3 4 5 6 7 8 9,而不是01 02 03....
两条代码是可以做到,是否有办法可以直接实现?

我记得看到很多例子,建立文本文档的,都是01 02 03 等等这样的.所以才有此一问.

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1001,1,1100) do (
  3.      set "str=%%a"
  4.      cd.>!str:~1!.txt
  5. )
复制代码
***共同提高***

TOP

返回列表