Win 10 XCOPY部分扩展匹配

Win 10 XCOPY部分扩展匹配

目录层次结构中有一个名为的文件README.cppclean。我想复制*.cpp目录树中的所有文件,但不复制该*.cppclean文件。

以下所有命令都会复制 .cppclean 文件:

xcopy /s /f ..\dirtree\*.cpp
xcopy /s /f "..\dirtree\*.cpp "
xcopy /s /f ..\dirtree\*.cpp.
xcopy /s /f "..\dirtree\*.cpp. "

有趣的是,下面的命令不会复制它:

xcopy /s /f ..\dirtree\*.c
xcopy /s /f ..\dirtree\*.cp
xcopy /s /f ..\dirtree\*.cppc
xcopy /s /f ..\dirtree\*.cppcl
xcopy /s /f ..\dirtree\*.cppcle
xcopy /s /f ..\dirtree\*.cppclea

当然

xcopy /s /f ..\dirtree\*.cppclean

还复制.cppclean 文件。

问题:如何使用复制所有*.cpp(但不复制*.cppclean)文件XCOPY?(我不想明确排除.cppclean文件,因为一般情况下可能会有其他类似的文件。)

答案1

由于您在评论中澄清说,您不想明确排除某些您不希望复制的不需要的文件扩展名,并且希望采用仅复制具有您指定的扩展名的文件的方法,因此我将在下面为您提供详细的解决方案。

本质上这将...

  • 用一个为/F使用TOKENS=*目录命令与开关一起/s递归/b 遍历包含.cpp要复制的文件的目录。

  • 从那里使用条件如果使用批量变量替换来验证文件扩展名确实是唯一的逻辑.cpp,如果这是真的,那么它将在循环的每次迭代中仅复制这些文件

  • 最终的XCOPY命令仍将XCOPY /s /f "%Src%\*%~nxF" "%Dst%从命令中获取显式文件名DIR,但前面带有星号通配符——条件逻辑仍确保除了 .CPP 命名的文件之外,不会复制任何其他文件

命令行

笔记: 根据需要设置源(Src=)和目标( )变量值Dst=

SET Src=C:\Users\User\Desktop\CPP
SET Dst=C:\CPP2
FOR /F "TOKENS=*" %F IN ('dir /s /b "%Src%\*.cpp"') DO IF %~xF==.cpp ECHO F | XCOPY /s /f "%Src%\*%~nxF" "%Dst%\"

更多资源

  • 为/F

    • FOR /?

          tokens=x,y,m-n  - specifies which tokens from each line are to
                            be passed to the for body for each iteration.
                            This will cause additional variable names to
                            be allocated.  The m-n form is a range,
                            specifying the mth through the nth tokens.  If
                            the last character in the tokens= string is an
                            asterisk, then an additional variable is
                            allocated and receives the remaining text on
                            the line after the last token parsed.
      

      此外,FOR 变量引用的替换功能也得到了增强。现在您可以使用以下可选语法:

      %~xI        - expands %I to a file extension only
      
  • 目录

  • 如果

答案2

使用/EXCLUDE:参数。`/EXCLUDE 需要一个包含排除文件列表的文件。

因此创建一个名为“excludedfileslist.txt”的文件,其中包含:

.cpp清洁

然后使用如下命令:

xcopy /s /f /exclude:excludedfileslist.txt ..\dirtree\cpp

相关内容