批处理文件:复制所有文件,但其名称包含一些子字符串

时间:2013-07-11 04:23:41

标签: command-line batch-file cmd filenames

首先是我的初学者。我想创建批处理文件来搜索特定的文件夹(包括所有它的子文件夹)并复制其中的所有文件,除了那些文件名包含一些特定的字符串,这是我到目前为止

set now=fish        
set logDirectory="C:\Users\paiseha\Desktop\bb\"      
for /r %logDirectory% %%i IN (*%now%*.*) do (          
rem copy process goes here            
)       

假设我有3个文件

  C:\Users\fareast\Desktop\bb\one.txt  
  C:\Users\fareast\Desktop\bb\twofishtwo.txt  
  C:\Users\fareast\Desktop\bb\three.txt  

所以我只想复制文件one.txt和three.txt,而只复制第二个文件,我知道它因为 * %now% *。*所以如何将其反转以使其相反,请帮助我,请提前感谢

2 个答案:

答案 0 :(得分:5)

尝试:

@ECHO OFF &setlocal
set "now=fish"        
set "logDirectory=C:\Users\paiseha\Desktop\bb"      
for /f "delims=" %%a in ('dir /a-d/b/s "%logDirectory%"^|findstr /riv "^.*[\\][^\\]*%now%[^\\]*$"') do (          
  rem copy process goes here            
)

编辑: \字符表示为[\\]而不是\\,原因是Vista FINDSTR正则表达式逃脱\。 Vista需要\\\\,但XP和Win 7使用\\。适用于所有平台的唯一表示形式是[\\]。有关详细信息,请参阅What are the undocumented features and limitations of the Windows FINDSTR command?

答案 1 :(得分:2)

for /f "delims=" %%a in ('dir /a-d/s/b "%logDirectory%" ') do echo %%~nxa|findstr /i /L "%now%" >nul&if errorlevel 1 ECHO COPY "%%a"

应该适合你。