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

[文件操作] 批处理如何提出文件名称中的数字?





  需要截取文件名称中的数字用来创建新的文本名称, 无论数字在那个位置 或者有多少个数字,只要是和其它字符分隔开的,都要用来创建新的文本名称  (不是数字的字符都可视为分隔)


E.g
文件后缀格式仅 TXT RAR示例


882546.RAR
02-54D需要截 2013取文件名称中_A1的-1C_数字用-236 来.654F创建 9470-的01.TXT
02-54需要截213 取文98 5548E-件 5689 名称中S19 数字用=236C来.644创建947-的02.RAR

上面3个文件名称中的数字
正确应该会创建出以下16个文本名称 (文本里内容为空)

02.txt
54.txt
2013.txt
1.txt
236.txt
654.txt
9470.txt
01.txt
213.txt
98.txt
5548.txt
5689.txt
19.txt
644.txt
947.txt

882546.txt

Thanks

本帖最后由 qixiaobin0715 于 2021-11-18 15:33 编辑

9楼代码是有问题的,还好第10行for循环后面没有其它代码,所以不受影响,如果后面还有其它代码就会出问题。正常应当是下面这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt *.rar') do (
  4.     set var1=%%a
  5.     set var2=%%a
  6.     for /l %%i in (0,1,9) do set "var1=!var1:%%i=!"
  7.     set "var1=!var1: =!"
  8.     call :a
  9. )
  10. pause
  11. goto :eof
  12. :a
  13. for /f "tokens=1* delims=%var1% " %%j in ("!var2!") do (
  14.     cd.>%%j.txt
  15.     if not "%%k"=="" set "var2=%%k"&goto :a
  16. )
复制代码

TOP

回复 9# qixiaobin0715


     9楼 for_flr       6楼  idwma 哥哥的好美

TOP

回复 7# 娜美
牵强用纯批,可以这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  4.     set var1=%%a
  5.     set var2=%%a
  6.     for /l %%i in (0,1,9) do set "var1=!var1:%%i=!"
  7.     set "var1=!var1: =!"
  8.     set "var1=!var1:-=!"
  9. :a
  10.     for /f "tokens=1* delims=%var1%- " %%j in ("!var2!") do (
  11.         cd.>%%j.txt
  12.         if not "%%k"=="" set "var2=%%k"&call :a
  13.     )
  14. )
复制代码

TOP

  1. @echo off
  2. echo;var m=WSH.Arguments(0).match(/\d+/g);WSH.echo(m.join('\r\n')) >#.#
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt *.rar') do for /f "delims=" %%i in ('cscript -nologo -e:jscript "#.#" "%%a"') do if not exist %%i.txt cd.>%%i.txt
  4. del #.# /f /q
  5. exit
复制代码

TOP

回复 4# qixiaobin0715


   bin哥哥  不用这样说,  应该是我说抱歉, 感谢你们  要你们写上代码, 花时间又要精神

TOP

回复 5# idwma


   干得漂亮   非常帅, Thanks

TOP

给bat吃上ps正则的加成
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt *rar^|powershell "$input -replace '\D+',' '"') do (
  4.     for %%a in (%%i) do cd.>%%a.txt
  5. )
  6. pause
复制代码

TOP

抱歉,是我考虑不周,代码确实有问题。

TOP

你的需求总是很另类。
未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt *rar') do (
  4.     set "str1=%%i"
  5.     for /l %%j in (0,1,9) do set "str1=!str1:%%j= !"
  6.     set "str2=%%i"
  7.     for %%k in (!str1!) do set "str2=!str2:%%k= !"
  8.     for %%a in (!str2!) do cd.>%%a.txt
  9. )
  10. pause
复制代码

TOP

返回列表