用于更改目录的 Xcopy 脚本

Xcopy Script for Changing Directory

我目前正在尝试编写一个脚本,将多个文件从一个位置复制到程序的运行位置,然后启动该应用程序。目前我有这个:

xcopy /s /v /z "I:\test150520\Files\stmt" "C:\Users\test\Desktop\test2"
PAUSE
START C:\Windows\NOTEPAD.EXE

这个脚本似乎没有问题,但我 运行 遇到的问题是我的 from 目录每天都在变化,我有 20150520。下面的目录始终相同,只是每天更改一个目录,我也需要脚本来执行此操作。

有没有办法做到这一点?

@echo off
::get today's date
set a=%date%
::format the date to MMYYDD
set b=%a:/=%
set full=%b%
::erase mon, tue, wed, thu etc
set full=%full:mon=%
set full=%full:tue=%
set full=%full:wed=%
set full=%full:thu=%
set full=%full:fri=%
set full=%full:sat=%
set full=%full:sun=%
pause
xcopy /s /v /z "I:\test\%full%\Files\stmt" "C:\Users\test\Desktop\test2"
PAUSE
C:\Windows\NOTEPAD.EXE

下一个脚本需要一个有效参数(参见下面提供的代码和示例中的 %~1);如果参数未找到或与有效文件夹不匹配,则获取今天的日期(请参阅 :getToday 子例程)。

@ECHO OFF >NUL
SETLOCAL enableextensions
set "dayFolder=%~1"
if "%dayFolder%"==""                           call :getToday
if not exist "I:\test\%dayFolder%\Files\stmt\" call :getToday

if exist "I:\test\%dayFolder%\Files\stmt\" (
    xcopy /s /v /z "I:\test\%dayFolder%\Files\stmt" "C:\Users\test\Desktop\test2"
) else (
    echo invalid "%~1" parameter or "%dayFolder%" folder does not exist
)
PAUSE
START C:\Windows\NOTEPAD.EXE

goto :eof
:getToday
for /F "tokens=2 delims==" %%G in (
    'wmic OS get LocalDateTime /value'
) do @for /F "tokens=*" %%x in ("%%G") do (
    set "dayFolder=%%~x"
)
set "dayFolder=%dayFolder:~0,8%"
goto :eof

此处 :getToday 子程序中的 for 循环是

  • %%G 检索 LocalDateTime 值;
  • %%x 删除值 returned 中结尾的 carriage returnwmic 行为:每个输出行以 0x0D0D0A 而不是常见的 0x0D0A).
  • 结尾

输出:

==>D:\bat\Whosebug356205.bat
invalid "" parameter or "20150521" folder does not exist
Press any key to continue . . .

==>D:\bat\Whosebug356205.bat 2015 05 19
invalid "2015" parameter or "20150521" folder does not exist
Press any key to continue . . .