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

Posted

技术标签:

【中文标题】管道字符串与变量中的文件夹到 findstr - 复制和重命名文件【英文标题】:Piping string with folders in variable to findstr - copy and rename files 【发布时间】:2020-08-23 08:27:08 【问题描述】:

我正在尝试将包含文件夹路径的字符串通过管道传输到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-part 似乎有效,rename-part 无效,当涉及到覆盖复制后必须重命名的一个文件时(名称冲突!),我很不知道如何这样做(IF EXIST & DEL?)。

【问题讨论】:

copy命令后面真的有换行符,所以下一行以&开头?我想应该没有。并且搜索字符串应为\._Modul_X$(注意反斜杠以转义.,否则表示任何字符)。最后你的报价需要修正;最好是引用 all 路径... 嗨!感谢你的回复!没有换行符,我用智能手机输入我的问题......是的,嗯......你知道其余的;-)不幸的是,我在做这样的事情方面的经验几乎为零,所以它是我有点难以弄清楚我的代码有什么问题...... 这是复制部分工作的唯一方法,对于重命名部分,我收到语法错误: FOR /F "delims=" %%i in ('dir /AD /S /B^| findstr "._Modul_X"') 复制 "..\xxx\yyy\ressources*.*" "%%i" & ren "%%i\xxxx_Modul_X.BAT_TEMPLATE" "%%Modul_X.BAT_TEMPLATE" 。如果我按照建议更改搜索字符串,则找不到匹配项。 请不要在 cmets 中发布代码,这太可怕了!请edit您的问题,然后在此处添加代码-格式正确,然后可以阅读... 是的,你说得有道理!很抱歉,按照您的建议编辑了我的问题。谢谢! 【参考方案1】:

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

【讨论】:

以上是关于管道字符串与变量中的文件夹到 findstr - 复制和重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将git的STDERR输出通过管道传输到findstr以获得实际结果?

如何将多个 findstr 结果分配给单独的变量

管道符重定向与环境变量

管道符重定向与环境变量

管道符重定向与环境变量

在批处理中怎么样将findstr查找的值赋值给变量?