Board logo

标题: [文本处理] [已解决]批处理如何截取文件名的前一段? [打印本页]

作者: Ico    时间: 2011-3-14 22:29     标题: [已解决]批处理如何截取文件名的前一段?

比如我获取了文件名
gggdsa22_23cfdsfsdf.mp3
dsa22_23fdsf.mp3

我想截取到22_23 就停止

就只想要它之前的字符串

大家帮帮忙啦

补充下: 已知文件夹下存放各种dmp文件(数据库文件),文件名包含了数据库用户的名称,所以我要先获取该文件的全名,然后从获取的文件名中截取到数据库的用户名

所以

我试验暂时输出他们的名字是这样的

@echo off

for /r E:\DataDMP\ %%i in (*.dmp) do (
set str=%%i
echo E:\DataDMP\%%i
call echo %%str%%
)
pause

[ 本帖最后由 Ico 于 2011-3-14 23:11 编辑 ]
作者: CrLf    时间: 2011-3-14 22:35

set filename=%filename:*22_23=22_23%
作者: Ico    时间: 2011-3-14 22:38     标题: 回复 2楼 的帖子

截取到后面的了,我想截取前面的。。
作者: haiou327    时间: 2011-3-14 22:55

file.txt
  1. gggdsa22_23cfdsfsdf.mp3
  2. dsa22_23fdsf.mp3
复制代码


test.cmd

@echo off
for /f  "tokens=1,2* delims=22_23" %%i in (file.txt) do echo %%i
pause

作者: Ico    时间: 2011-3-14 22:55     标题: 回复 4楼 的帖子

真的不好意思哦,我没把问题说清楚,我是先要获取文件名和拓展名的,然后再获取文件名 22_23前面的字符串

我是这样写的  

@echo off

for /r E:\DataDMP\ %%i in (*.dmp) do (
set str=%%i
echo E:\DataDMP\%%i

call echo %%str%%
)
pause
作者: CrLf    时间: 2011-3-14 22:58

delims不能将词组作为分隔符,所以折衷的办法是把词组替换成不可能存在于目标字符串的符号,比如文件名中不可能有\,所以就可以:
  1. @echo off
  2. set filename=%filename:22_23=\%
  3. for /f "delims=\" %%a in ("%filename%") echo %%a
  4. pause
复制代码

作者: CrLf    时间: 2011-3-14 23:04

  1. @echo off&setlocal enabledelayedexpansion
  2. for /r E:\DataDMP\ %%i in (*.dmp) do (
  3. set filename=%%i
  4. echo E:\DataDMP\%%i
  5. set filename=%filename:22_23=\%
  6. for /f "tokens=1* delims=\" %%a in ("%filename%") echo %%a%%b
  7. )
  8. pause
复制代码

作者: haiou327    时间: 2011-3-14 23:06

.

              .
@echo off
for /f  "tokens=1,2* delims=22_33" %%i in ('dir /a-d/b *.dmp') do echo %%i
pause

[ 本帖最后由 haiou327 于 2011-3-14 23:08 编辑 ]
作者: Ico    时间: 2011-3-14 23:10     标题: 回复 8楼 的帖子

哈哈哈,解决了  谢谢哦··




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