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

[文件操作] 批处理如何提取文件名里面的一些指定的字符

[复制链接]
发表于 2011-9-26 00:13:55 | 显示全部楼层 |阅读模式
我用了一个晚上的时间,对着for的教程来做了一个批处理,不过总感觉这样的做法很笨,看看能不能用更简练的语句来完成,不生成临时文件。

例如:一个目录下有很多个子目录,每个子目录都含有"VTS_01_1 T80 2_0ch 384Kbps DELAY -432ms.ac3"这样类似的文件,红色字体是文件名的共通点,里面的“-432”是一个不定的数字,可能是0,可能是正数或者负数,但不会是小数,现想用一个批处理,要把中间的数都提取出来,而不产生临时文件。

以下是我写的最笨的批处理
  1. dir/b %~dpn1\*.ac3 >>temp.txt

  2. for /f "tokens=6" %%i in (temp.txt) do echo %%i >>temp1.txt

  3. for /f "delims=." %%j in (temp1.txt) do echo %%j >>test.txt
复制代码
发表于 2011-9-26 02:39:07 | 显示全部楼层
本帖最后由 hfg1977 于 2011-9-26 02:41 编辑

假设红字中的数字前面有个空格后面是ms.ac3, 红字前面的空格与字符不定,
只要数字:


  1. for /f "tokens=* delims=" %%a in ('dir /a-d/s/b *.ac3') do (
  2. echo %%~nxa
  3. for %%i in (%%~na) do set str=%%~ni
  4. call set str=%%str:~,-2%%
  5. call echo.只要数字:        %%str%%
  6. )


复制代码
 楼主| 发表于 2011-9-26 15:21:11 | 显示全部楼层
本帖最后由 kentfung 于 2011-9-26 15:25 编辑

感谢LS的帮助,不过最终的输出结果,最后是想要ms结尾的,并且要将%%str%%用一个set来赋值的,应该怎样修改呢?
  1. set delay=%%str%%
复制代码
另外代码里面的“str”,可以修改成其他吗?因为段代码是要放到其他的批处理里面使用的,str原来已经有了,怕会出错
发表于 2011-9-26 15:57:12 | 显示全部楼层
  1. %1 @cmd /q /v /c %0 :
  2. for %%a in (*.*) do (
  3.   set fn=%%a
  4.   for /f "delims=" %%b in ("!fn:-=\!") do echo %%~nb
  5. )
  6. pause
复制代码
 楼主| 发表于 2011-9-26 16:03:37 | 显示全部楼层
看不明白斑竹的代码
运行后显示如下
  1. 123ms
  2. 720P
  3. a
  4. ED
  5. ED_720P
  6. temp
  7. test
  8. Stream Information
  9. VTS_01_0
  10. VTS_01_1 T80 2_0ch 384Kbps DELAY 0ms
  11. VTS_01_1
  12. VTS_01_1
  13. VTS_01_1
  14. 请按任意键继续. . .

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 01:39 , Processed in 0.020170 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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