Board logo

标题: [文件操作] 批处理如何提取文件名里面的一些指定的字符 [打印本页]

作者: kentfung    时间: 2011-9-26 00:13     标题: 批处理如何提取文件名里面的一些指定的字符

我用了一个晚上的时间,对着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
复制代码

作者: hfg1977    时间: 2011-9-26 02:39

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

作者: kentfung    时间: 2011-9-26 15:21

本帖最后由 kentfung 于 2011-9-26 15:25 编辑

感谢LS的帮助,不过最终的输出结果,最后是想要ms结尾的,并且要将%%str%%用一个set来赋值的,应该怎样修改呢?
  1. set delay=%%str%%
复制代码
另外代码里面的“str”,可以修改成其他吗?因为段代码是要放到其他的批处理里面使用的,str原来已经有了,怕会出错
作者: CrLf    时间: 2011-9-26 15:57

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

作者: kentfung    时间: 2011-9-26 16:03

看不明白斑竹的代码
运行后显示如下
  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. 请按任意键继续. . .
复制代码





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