2015-12-14 48 views
0

我有一个文件,LIST.TXT一个Windows批处理脚本,它包含以下两行(它可以改变,并有1对多线):如何获取串件中给出2种格式

\\主目录\ DIR1 \ DIR2 \ DIR3 \ TEST_NAME_DIRECT_2015-06.csv

\\主目录\ DIR1 \ DIR2 \ DIR3 \ TEST_NAME_DETAIL_0615.DED

我不仅需要抓住这整条生产线,但我还需要抓住那条线的一部分。文件末尾的日期可以是_YYYY-MM或_MMYY,并在任何情况下以CSV或DED结尾。

基本上,我需要这在一天结束的参数,使用Java调用:

  1. TEST_NAME_DIRECT.csv \\主目录\ DIR1 \ DIR2 \ DIR3 \ TEST_NAME_DIRECT_2015-06.csv
  2. TEST_NAME_DETAIL.DED \\主目录\ DIR1 \ DIR2 \ DIR3 \ TEST_NAME_DETAIL_0615.DED

我需要的文件名没有日期,然后是头顶后给出完整的文件路径+名称。

我有下面的代码至今:

所有的
set file=\\homedir\dir1\dir2\dir3\list.txt 

for /f "tokens=*" %%x in (%file%) do (
    FOR /f "tokens=5 delims=\" %%a IN ("%%x") DO (
    echo %%a %%x 
    ) 
) 

第一,第二FOR循环里面,我不能做任何事情一样 集newvar = %%一个 newvar最终是空白。是否有一些正则表达式或找到我可以使用的函数,这样我就可以最终得到一个变量,该变量最终是没有日期的文件名并且保持为.csv或.ded?我试过Findstr,但它试图打开“TEST_NAME_DIRECT_2015-06.csv”,当我想搜索那个实际的字符串本身时。

非常感谢!

+0

这个*有*要批量完成吗? Powershell现在可在标准Windows安装中使用.. – Blorgbeard

+0

使用命令修饰符。阅读FOR帮助的最后一部分。 – Squashman

+0

我正在将一些工作转移到Java以用于产生线程,相反,因为我无法从Windows并行运行相同的Java jar。 – Paul

回答

1
@echo off 
setlocal EnableDelayedExpansion 

for /F "delims=" %%a in (list.txt) do (
    rem Get file name only, i.e. "TEST_NAME_DIRECT_2015-06" 
    set "name=%%~Na" 
    rem Change "_" by "." and get name only, i.e. "TEST.NAME.DIRECT" 
    for %%b in ("!name:_=.!") do set "name=%%~Nb" 
    rem Change back "." by "_" and complete the output 
    echo !name:.=_!%%~Xa %%a 
) 
+0

谢谢@Aacini,这个作品! – Paul

+0

我可以让你选择这个答复吗?点击绿色的复选标记。 – Aacini

+0

刚刚做了,谢谢 – Paul

相关问题