【问题标题】:Batch file : copy all file except those its name contain some substring批处理文件:复制所有文件,但名称包含一些子字符串的文件除外
【发布时间】:2013-07-09 05:34:57
【问题描述】:

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

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% *.* 那么我怎样才能把它倒过来让它反过来呢,请帮助我,在此先感谢

【问题讨论】:

    标签: command-line batch-file cmd filenames


    【解决方案1】:

    尝试:

    @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 正则表达式如何转义 @987654326 @。 Vista 需要 \\\\,但 XP 和 Win 7 使用 \\。唯一适用于所有平台的表示是[\\]。请参阅What are the undocumented features and limitations of the Windows FINDSTR command? 了解更多信息。

    【讨论】:

    • 考虑包含%now%...
    • 感谢您的回复,您通过“C:\Users\fareast\Desktop\”而不是“C:\Users\paiseha\Desktop\bb\”给出循环的代码,这是为什么呢?
    【解决方案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"
    

    应该适合你。

    【讨论】:

    • 为什么它也循环通过父目录?我的意思不是循环通过“C:\Users\paiseha\Desktop\bb\”,因为我设置它循环通过目录“C:\Users\paiseha\Desktop\”
    • @paiseha :需要与@Endoro 进行相同的编辑 - 引用移动到set log... 以包含var=string 而不是var="quoted string"。第一个分配没有尾随空格(如果存在)的值,而第二个将分配一个带引号的值和行上的任何层尾随空格到var
    • +1,但 FINDSTR 搜索可能应该使用 /L 文字选项以及 /I 选项。如果没有/L,如果now 类似于.abc,则解决方案将失败,因为. 将匹配任何字符。
    • 另一种选择是使用FIND /I 而不是FINDSTR /IL。此外,使用 || copy "%%a" 而不是 & if errorlevel 1 copy "%%a" 更短...
    • @dbenham 是的 - 在 /L 开关上足够公平 - 已编辑。至于|| vs && - 我从不使用它们,只是因为我永远不记得哪个是哪个是什么......
    猜你喜欢
    • 2015-07-29
    • 2015-05-10
    • 1970-01-01
    • 2020-09-20
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多