【问题标题】:Xcopy Script for Changing Directory用于更改目录的 Xcopy 脚本
【发布时间】:2015-05-20 17:12:31
【问题描述】:

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

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

这个脚本似乎可以正常工作,但我遇到的问题是我的 from 目录每天都会在我拥有 20150520 的地方发生变化。下面的目录总是相同的,只是每天都在变化,我也需要脚本来做到这一点。

有没有办法做到这一点?

【问题讨论】:

  • 一般情况下,你可以使用either当前系统日期`I:\test`下的最后日期 pass您的脚本的日期作为参数要求用户输入。你想用哪一个?
  • 将日期作为参数传递将是我想要使用的更多内容。我正在尝试以需要最少用户输入的方式设置脚本。

标签: batch-file directory copy xcopy


【解决方案1】:

下一个脚本需要一个有效参数(参见下面提供的代码和示例中的%~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 删除返回值中的结尾回车wmic 行为:每个输出行以0x0D0D0A 结尾而不是常见的0x0D0A)。

输出

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

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

【讨论】:

  • @Eric 如果我的回答有帮助,请考虑将其标记为已接受。 See this page 解释为什么这很重要。
【解决方案2】:
@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

【讨论】:

  • 今天运行的这个脚本返回 05212015Thu 而不仅仅是 20150521。
  • 我有一个格式化的代码给你。给我您的时间和日期格式的详细信息,yyyymmdd 或 ddmmyyyy。
猜你喜欢
  • 2012-11-25
  • 2014-04-12
  • 1970-01-01
  • 2012-09-20
  • 2017-11-27
  • 2010-11-28
  • 2011-03-21
  • 1970-01-01
  • 2010-10-05
相关资源
最近更新 更多