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

[文本处理] [已解决]批处理如何截取文件名的前一段?

比如我获取了文件名
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 编辑 ]

set filename=%filename:*22_23=22_23%

TOP

回复 2楼 的帖子

截取到后面的了,我想截取前面的。。

TOP

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

TOP

回复 4楼 的帖子

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

我是这样写的  

@echo off

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

call echo %%str%%
)
pause
1

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2

TOP

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

TOP

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

TOP

.

              .
@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 编辑 ]
1

评分人数

    • Ico: 乐于助人技术 + 1

TOP

回复 8楼 的帖子

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

TOP

返回列表