标题: [文本处理] [已解决]批处理批量建立以数字命名的文本如何在文件名的数字前补零? [打印本页]
作者: Bearxy 时间: 2011-5-13 11:18 标题: [已解决]批处理批量建立以数字命名的文本如何在文件名的数字前补零?
本帖最后由 pcl_test 于 2016-8-6 22:47 编辑
是这样的,我需要建立100个文本,那利用FOR就可以解决了。- 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
- for /l %%i in (1,1,9) do echo.>0%%i.txt
- for /l %%i in {10 1 100) do echo.>%%i.txt
复制代码
作者: batman 时间: 2011-5-13 12:12
- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1001,1,1100) do (
- set "str=%%a"
- cd.>!str:~1!.txt
- )
复制代码
作者: Bearxy 时间: 2011-5-13 12:26
本帖最后由 Bearxy 于 2011-5-13 12:28 编辑
3# wolonga123
这种办法我也试了.只怪我问题没说清楚,文件是本身存在的,我想用FOR来取文件名.
文件是01 02 03 04 05 06.txt- 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 编辑
- @echo off&setlocal enabledelayedexpansion
- set p=0
- set /p a=起始文号,请用数字!:
- set /p b=终止文号,请用数字!:
- set /p c=文件后辍:四位以内的字符
- set /p d=需要补0的位数?如001为3,0001为4!:
- set /p e=你想什么前辍吗?:
- for /l %%1 in (%a%,1,%b%) do (
- call :补0 %%1 %d%
- echo !dat!
- cd.>!dat!.%c%
- )
- echo :eof
-
- :补0
- :test
- set "var=%1"
- set len=0
- for /l %%x in (0,1,20) do (
- set "var_=!var:~%%x,1!"
- if "!var_!"=="" goto :b
- set /a len+=1
- )
- :b
- set /a kg=%2-%len%
- set "dat="
- if %kg% leq 0 set dat=%1 & goto :eof
- for /l %%x in (1,1,%kg%) do set "dat=!dat!%p%"
- set "dat=!e!!dat!%1"
- goto :eof
复制代码
作者: Bearxy 时间: 2011-5-13 12:51
7# mxxcgzxxx
谢谢大大,测试的时候出现了一个此时不应有...我没看清楚.
这种思路,是不是用ren更快些?
比如- @echo off
- set a=0
- :ks
- set/a a=%a%+1
- ren "%a%.txt" "0%a%.txt"
- if %a%==9 goto ok
- goto ks
-
- :ok
- echo 完成!
- pause
复制代码
作者: wolonga123 时间: 2011-5-13 13:00
5# Bearxy
纯属抄袭斑竹的..^-^- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1001,1,1100) do (
- set "str=%%a"
- cd.>!str:~-2!.txt
- )
复制代码
作者: wolonga123 时间: 2011-5-13 13:05
本帖最后由 wolonga123 于 2011-5-13 13:13 编辑
这样好像也行..不过思路差不多- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,100) do (
- set "str=0%%a"
- cd.>!str:~-2!.txt
- )
- 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 这种数字- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,1000) do (
- set /a "str=%%a+100000"
- cd.>!str:~-4!.txt
- )
- pause
复制代码
作者: CrLf 时间: 2011-5-18 12:48
经验:在for中解释%%a比读取变量耗时更多,建议能用变量代替就尽量避免- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,1000) do (
- set /a "str+=100001"
- cd.>!str:~-4!.txt
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |