Windows 批处理命令中目录的通配符

Wildcards for directory in Windows batch command

我需要使用批处理文件将一个文件夹的内容复制到另一个文件夹 - 我面临的问题是其中一个父文件夹每天都会更改,并以今天的日期命名。因此,例如,我有以下命令:

xcopy /Y /S "\auto-jenkins\Builds17\R1\[0822]\EN\*.*" "C:\Users\Administrator\Desktop\EN"

今天工作正常,不幸的是明天 [0822] 将不存在,我需要的文件将在 [0823] 下。有谁知道我可以使用通配符代替 [0822] 的方法吗?

[08**] 文件夹将是 \R1 下面的唯一文件夹,如果有帮助...

您可以使用特定于国家/地区的自动日期变量 %date

xcopy /Y /S "\auto-jenkins\Builds17\R1\[%date:~3,2%%date:~0,2%]\EN\*.*" "C:\Users\Administrator\Desktop\EN"

在这里,月份和日期是从日期字符串中提取的。第一个数字是起始位置(从0开始),下一个数字是长度。

有谁知道我可以使用通配符代替 [0822] 的方法吗?

您不需要通配符。请改用当前日期(格式正确)。使用以下批处理文件。

CopyFiles.cmd:

@echo off
setlocal
rem get the date
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1,2" %%g in (`wmic Path Win32_LocalTime Get Day^,Month ^| findstr /r /v "^$"`) do (
  set _day=00%%g
  set _month=00%%h
  )
rem pad day and month with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
xcopy /Y /S "\auto-jenkins\Builds17\R1[%_month%%_day%]\EN*.*" "C:\Users\Administrator\Desktop\EN"
endlocal

进一步阅读

反正R1目录下只有一个文件夹,可以用for /D取名:

for /D %%D in ("\auto-jenkins\Builds17\R1\*") do (
    xcopy /Y /S "%%~D\EN\*.*" "C:\Users\Administrator\Desktop\EN"
)

* 是一个全局通配符,代表任意数量的任意字符。您也可以使用 [????] 代替它,因此您的文件夹名称必须由 [].

之间的四个字符组成