在findstr变量中加入带文件夹的管道字符串--复制和重命名文件。

问题描述 投票:0回答:1

我试图将一个包含文件夹路径的字符串管到 findstr 来搜索给定文件夹名称中的特定部分--至少,这是我计划要做的。

我有一个源文件夹,里面的文件必须被复制到多个子文件夹中,之后,复制的文件中的一个文件必须被重命名为对应于目标文件夹。如果已经有相同名字的文件,就必须将其覆盖。我试图通过以下方法来实现这个目标 .bat-文件,在我的代码中使用以下命令。

pushd ..\..\destination_folder\

FOR /F "delims=" %%i in ('dir /AD /S /B^| findstr /I "._Modul_X$"') do copy ..\xxx\yyy\ressources\*.* %%i
& ren %%i\xxxx_Modul_X.BAT_TEMPLATE" "%%i_Modul_X.BAT_TEMPLATE  

在我的代码中使用以下命令: copy-部分似乎可以,但 rename-部分没有,当涉及到要覆盖复制后必须重命名的一个文件时(名称冲突!),我很不知道该怎么做 (IF EXIST &amp。DEL?).

batch-file cmd copy pipe findstr
1个回答
0
投票

如果我理解你正在尝试的过程,那么下面的内容应该可以满足你的要求。假设 xxxx 是一个正好由四位数(目录名)和字符(文件名)组成的序列。:

@Echo Off
SetLocal EnableExtensions

PushD "..\..\destination_folder" 2>NUL || GoTo :EOF
If Not Exist "..\xxx\yyy\resources\*.*" GoTo :EOF

For /F "Delims=" %%G In (
    'Dir /B /S /A:D "????_Modul_X" 2^>NUL ^|%__AppDir__%findstr.exe^
     /I /R "\\[0123456789][0123456789][0123456789][0123456789]_Modul_X"'
) Do (
    For /F "Delims=" %%H In (
        '%__AppDir__%where.exe /F "%%G":"????_Modul_X.BAT_TEMPLATE" 2^>NUL'
    ) Do Del /A /F %%H
    Copy /Y "..\xxx\yyy\resources\*.*" "%%G" 1>NUL
    For /F "Delims=" %%I In (
        '%__AppDir__%where.exe /F "%%G":"????_Modul_X.BAT_TEMPLATE" 2^>NUL'
    ) Do If /I Not "%%~nxI" == "%%~nxG%%~xI" Ren %%I "%%~nxG%%~xI"
)

请注意,您可能需要修改这两个实例中的 xxx\yyy\resources, (行 514),因为没有人真正使用这样的名字。特别注意拼写,我用了 resources 以上,不 ressources.

© www.soinside.com 2019 - 2024. All rights reserved.