批处理脚本以基于源文件名

时间:2017-05-07 04:28:19

标签: batch-file

请帮助我解决以下我要解决的问题。

我有三个源文件将具有以下名称:

2d09089d-ce5a-47dd-a2f5-4ee1c8c9efa5_test1_test2_fg_nel_dd tel.CSV
2d09089d-ce5a-47dd-a2f5-4ee1c8c9efa5_test1_test2_fg_nel_dd tel.CSV.MOD
2d09089d-ce5a-47dd-a2f5-4ee1c8c9efa5_test1_test2_fg_nel_dd tel temp.TKT

有一个相应的文件名为:

78256_2d09089d-ce5a-47dd-a2f5-4ee1c8c9efa5_test1_test2_fg_nel_dd tel.trc

我需要一个批处理脚本来匹配相应的文件(.trc)和相应的源文件三元组,然后将源文件的三元组移动到另一个目录。源文件的文件名长度会有所不同,因为它们包含不同的公司名称。因此,我认为可以做到的一种方法是,如果脚本被忽略或截断触发器文件名的前六个字符,则在接下来的36个字符上进行匹配。

以下尝试没有运气。

@echo off
setlocal enabledelayedexpansion
for %%g in ('*.CSV *.MOD *.TKT') do  (
    set var1=%%~g
    set var2= !var1:~0,36!
    for %%a in (*.trc) do (
        set var3=%%~a
        set var4= !var3:~0,36!

    if  !var2! equ !var4! (COPY "%%g" "C:\dest" >nul)
        ) 
)

2 个答案:

答案 0 :(得分:0)

你的问题不完整。

您说“触发器文件名”是扩展名为.trc的文件。这意味着必须处理的文件是扩展名为.trc的文件,其他文件无关紧要。

你说你需要“一个批处理脚本来匹配相应的文件(.trc)和相应的源文件三元组”。您没有指定如果更多或更少的文件而不是匹配相应.trc文件的“三元组”会发生什么,所以我想无关紧要有多少文件与.trc扩展名匹配的文件:只需将它们全部移动!

您没有指定如何处理已处理的*.trc文件。

在问题标题中,您说“移动文件”,但在示例代码中您使用“复制文件”。

下一个批处理文件处理*.trc个文件并将所有匹配的文件复制到其他目录:

@echo off
setlocal

rem Process all files with ".trc" extension
rem take just the file name after the first underscore character
for /F "tokens=1* delims=_" %%a in ('dir /B *.trc') do (

   rem Copy all matching files to other directory
   copy "%%~Nb.*" "C:\dest" >nul

)

如果此代码无法解决您的问题,那么在描述问题的详细信息时,您必须更清晰 ...

答案 1 :(得分:0)

以下是我完成的脚本,它可以正常工作。

for /f "tokens=*" %%1 in ('dir /a-d /b *.*') do (
    set filename=%%1&set match1=!filename:~0,36!
       echo !match1!
       for /f "tokens=*" %%A in ('dir /a-d /b *.ctrl') do (
          set filename2=%%A&set match2=!filename2:~0,36!
                      echo !match2!      
        if "!match2!" == "!match1!" if not %%~x1==.ctrl MOVE "%%1" "C:\dest" >nul
    )        
)