我有一个批处理文件,在 VS2019 中构建解决方案时运行。.bat 文件使用 xcopy 将 .dll 从我的项目的 Debug 文件夹复制到另一个目标方向。
我想使用 xcopy 将文件复制到目标目录中的子文件夹中。唯一的问题是,我要复制到的子文件夹的名称将始终变化,因为每当我为分发给客户进行新构建时,都会在目标目录中创建子文件夹。
例如,现在目标目录包含以下文件夹,这些文件夹以所有先前分发的 .dll 的版本命名:
MySuperSoftware21.4.8055.22312
MySuperSotware21.4.1110.34622
.
.
.
etc.
今天目标目录将有一个新的子目录,如下所示:
MySuperSoftware22.1.8119.20613
MySuperSoftware21.4.8055.22312
MySuperSotware21.4.1110.34621
.
.
.
etc.
并且我希望 xcopy 仅将最新的 .dll 复制到新创建的子目录中。
我可以使用最新的子目录日期或子目录内部版本号。我查看了 xcopy 开关列表,但找不到适用于这种情况的开关。这可能吗?
答案1
@echo off
cd/d "%~dp0" & setlocal
for /f delims^=* %%i in ('dir/o-d/ad/b^|findstr/e [0-9]
')do xcopy /duy ".\*.dll" "%%~fi" & endlocal & goto:eof
我了解你正在寻找这样的执行方式:
1.标识最后创建的子目录
for /f delims^=* %%i in ('dir/o-d/ad/b^|findstr/e [0-9]')do echo\ Last dir is: "%%~fi"
2.仅复制最新的 .dll 文件,如果它们已经存在于新的目标目录中:
xcopy /duy ".\*.dll" "%%~fi"
- 观察1.看这是什么
%~dp0
意思?它是如何起作用的?因为我假设你的 bat 在(并且将被执行)与 .dlls 文件位于同一文件夹中,否则请替换"%~dp0"
包含要复制源 .dll 的文件夹的完整路径
@echo off
cd/d "D:\The\Full\Path\To\Dlls\Folder" & setlocal
for /f delims^=* %%i in ('dir/o-d/ad/b^|findstr/e [0-9]
')do xcopy /duy ".\*.dll" "%%~fi" & endlocal & goto :eof
XCOPY
Copy files and/or directory trees to another folder. XCOPY is similar to
the COPY command except that it has additional switches to specify both
the source and destination in detail.
While still included in Windows 10, XCOPY has been deprecated in favor of
Robocopy, a more powerful copy tool, which is now built into Windows
Server and Desktop operating systems [x]
Syntax
XCOPY source [destination] [options]
/D:mm-dd-yyyy
Copy files changed on or after the specified date.
If no date is given, copy only files whose
source date/time is newer than the destination time.
/Y Suppress prompt to confirm overwriting a file.
/L List only - Display files that would be copied.
/U Copy only files that already exist in destination.
- 观察2.为了测试执行,检查命令并且不允许任何复制,您可以尝试使用
xcopy
标志/dul
:
@echo off
cd/d "D:\The\Full\Path\To\Dlls\Folder" & setlocal
for /f delims^=* %%i in ('dir/o-d/ad/b^|findstr/e [0-9]
')do xcopy /dul ".\*.dll" "%%~fi" & endlocal & goto :eof
其他资源: