Board logo

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

作者: Bearxy    时间: 2011-5-13 11:18     标题: [已解决]批处理批量建立以数字命名的文本如何在文件名的数字前补零?

本帖最后由 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。
各种办法都想了,一直做不到。
希望各位大大指教
作者: batman    时间: 2011-5-13 11:43

楼主可否列举下你所想的各种办法?
作者: wolonga123    时间: 2011-5-13 11:55

  1. for /l %%i in (1,1,9) do echo.>0%%i.txt
  2. for /l %%i in {10 1 100) do echo.>%%i.txt
复制代码

作者: batman    时间: 2011-5-13 12:12

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

作者: Bearxy    时间: 2011-5-13 12:26

本帖最后由 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 等等这样的.所以才有此一问.
作者: Bearxy    时间: 2011-5-13 12:29

4# batman
batman老大的代码也是一样,到9后面的值就为 010 011 012...  了。
作者: mxxcgzxxx    时间: 2011-5-13 12:41

本帖最后由 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
复制代码

作者: Bearxy    时间: 2011-5-13 12:51

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

作者: wolonga123    时间: 2011-5-13 13:00

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

作者: wolonga123    时间: 2011-5-13 13:05

本帖最后由 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
复制代码

作者: hanyeguxing    时间: 2011-5-13 14:20

10# wolonga123


迭代范围是1-99
作者: mxxcgzxxx    时间: 2011-5-13 15:28

8# Bearxy

对不起因为是在论坛里写的没有测试过,现在改正了一些语法错误可以用了!你再试试
作者: Bearxy    时间: 2011-5-13 17:27

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

12# mxxcgzxxx


测试完全OK,谢谢mxxcgzxxx! 也很感激bathome和其他几位的热心帮助!
作者: applba    时间: 2011-5-13 17:34

直接把前面几个文件改名就行了……
作者: mxxcgzxxx    时间: 2011-5-13 20:31

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

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

最后子程序那赋值那改成 set "dat=!e!!dat!%1"
作者: caruko    时间: 2011-5-18 02:40

本帖最后由 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
复制代码

作者: CrLf    时间: 2011-5-18 12:48

经验:在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
复制代码





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