管道字符串与变量中的文件夹到 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
的两个实例,(5
和 14
行),因为没有人真正使用这样的名称,支付特殊费用注意拼写,上面我用的是resources
,不是ressources
。
【讨论】:
以上是关于管道字符串与变量中的文件夹到 findstr - 复制和重命名文件的主要内容,如果未能解决你的问题,请参考以下文章