用于更改目录的 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 return (wmic
行为:每个输出行以 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 . . .
我目前正在尝试编写一个脚本,将多个文件从一个位置复制到程序的运行位置,然后启动该应用程序。目前我有这个:
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 return (wmic
行为:每个输出行以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 . . .