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

Windows批处理命令中目录的通配符,windows,batch-file,wildcard,Windows,Batch File,Wildcard,我需要使用批处理文件将一个文件夹的内容复制到另一个文件夹-我面临的问题是,其中一个父文件夹每天都会更改,以今天的日期命名。例如,我有以下命令: xcopy /Y /S "\\auto-jenkins\Builds\2017\R1\\[0822]\EN\\*.*" "C:\Users\Administrator\Desktop\EN" 这在今天工作正常,不幸的是明天[0822]将不存在,我需要的文件将在[0823]下。有人知道我用通配符代替[0822]的方法吗 [08**]文件夹将是\R1下面的

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

xcopy /Y /S "\\auto-jenkins\Builds\2017\R1\\[0822]\EN\\*.*" "C:\Users\Administrator\Desktop\EN"
这在今天工作正常,不幸的是明天
[0822]
将不存在,我需要的文件将在
[0823]
下。有人知道我用通配符代替
[0822]
的方法吗


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

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

xcopy /Y /S "\auto-jenkins\Builds\2017\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\Builds\2017\R1[%_month%%_day%]\EN*.*" "C:\Users\Administrator\Desktop\EN"
endlocal

进一步阅读
  • -对于所有与Windows命令行相关的内容都是一个很好的参考
  • -根据另一个命令的结果循环命令
  • -Windows Management Instrumentation命令

由于
R1
目录中只有一个文件夹,因此您可以使用
for/D
获取其名称:

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

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

区域设置之间的四个字符组成。日期应取自,以便它们可以独立于语言环境。请不要推广依赖于语言环境的解决方案。例如,这在美国是行不通的。关于独立于语言环境的解决方案,请参见我的答案。我理解您的观点。你的代码是一个完美的解决方案,我会投票表决。然而,我的建议是切实可行的,而且非常简单,几乎每个人都能适应当地的惯例。至少现在人们有了选择。“父文件夹每天都会改变,以今天的日期命名”,所以没有一个文件夹:)嗯。。。OP声明在
R1
下面只有一个文件夹。。。我误解了什么吗?也许@StephenO'Gorman应该澄清一下……你是对的,我刚才说的不太清楚。我应该说“父文件夹”是单数,意思是以今天的日期命名的文件夹。我现在正在使用这个解决方案。