找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19047|回复: 9

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

[复制链接]
发表于 2021-11-15 19:37:32 | 显示全部楼层 |阅读模式




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


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
发表于 2021-11-15 20:52:23 | 显示全部楼层
你的需求总是很另类。
未测试:
  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
复制代码
发表于 2021-11-15 22:27:03 | 显示全部楼层
抱歉,是我考虑不周,代码确实有问题。
发表于 2021-11-15 22:28:30 | 显示全部楼层
给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
复制代码
 楼主| 发表于 2021-11-15 23:16:45 | 显示全部楼层
回复 5# idwma


   干得漂亮   非常帅, Thanks
 楼主| 发表于 2021-11-15 23:22:40 | 显示全部楼层
回复 4# qixiaobin0715


   bin哥哥  不用这样说,  应该是我说抱歉, 感谢你们  要你们写上代码, 花时间又要精神
发表于 2021-11-16 09:05:03 | 显示全部楼层

  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
复制代码
发表于 2021-11-17 12:56:27 | 显示全部楼层
回复 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. )
复制代码
 楼主| 发表于 2021-11-17 16:43:02 | 显示全部楼层
回复 9# qixiaobin0715


     9楼 for_flr       6楼  idwma 哥哥的好美
发表于 2021-11-18 10:05:04 | 显示全部楼层
本帖最后由 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. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 21:53 , Processed in 0.033272 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表