目录层次结构中有一个名为的文件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
由于您在评论中澄清说,您不想明确排除某些您不希望复制的不需要的文件扩展名,并且希望采用仅复制具有您指定的扩展名的文件的方法,因此我将在下面为您提供详细的解决方案。
本质上这将...
命令行
笔记: 根据需要设置源(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%\"
更多资源
-
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