管道字符串与变量中的文件夹到 findstr - 复制和重命名文件

Piping string with folders in variable to findstr - copy and rename files

我正在尝试将包含文件夹路径的字符串传输到 findstr 以搜索给定文件夹名称中的特定部分 - 或者至少,这是我打算做的.

我有一个源文件夹,其中的文件必须复制到多个子文件夹中,之后,其中一个复制的文件必须重命名为与目标文件夹相对应。如果已经有同名文件,则必须覆盖它们。我正在尝试通过 .bat-file 在我的代码中使用以下命令来实现此目的:

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 & DEL?)。

如果我理解你正在尝试的过程,那么下面应该按照你的要求进行,根据我的假设 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.