使用 XCOPY 的路径无效

使用 XCOPY 的路径无效

编写脚本以使用 XCOPY 将硬盘驱动器(C:) 中的选定目录备份到外部硬盘驱动器上。

当我在源和目标上使用相同的目录名时,一切都很顺利。但是当我尝试变得聪明一点,将目标设为名为“Archive”的过时主目录的子目录时,我不断收到“无效路径”错误。以下是我尝试执行的操作的摘录:

set/P Drive= Enter destination drive (with colon):
:: 
set BACKUPCMD= xcopy /S /D /I /Y /Q /C /T
:: 
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
SET dateNtime=%date:~10,4%-%date:~4,2%-%date:~7,2   %__%hour%:%time:~3,2%       
::
set directory=TEST
set source=%directory%
set destination=%Drive%\ARCHIVE_%dateNtime%\%directory%

%BACKUPCMD% "C:\%source%\*.*" "%destination%"

有人能帮我解释一下语法吗?

答案1

有人能帮我解释一下语法吗?

您的批处理文件存在几个问题:

  1. xcopy go 的选项来源和目的地

    XCOPY source [destination] [options]
    
  2. 你的SET dateNtime...命令被破坏了。

    • 它包含空格和尾随空格。

    • 使用%date%提供解决方案取决于操作系统的区域设置、区域和语言设置。

    • 我没有尝试修复你的代码,而是提供了使用的代码 wmic(请参阅获取日期

    • 此代码独立于操作系统区域设置、语言或用户选择的日期格式(控制面板/区域),并且可以非常容易地更改输出格式。

以下批处理文件修复了这两个问题:

@echo off
setlocal enableDelayedExpansion
set/P Drive= Enter destination drive (with colon):
:: 
set BACKUPCMD=xcopy
SET BACKUPOPTIONS=/S /D /I /Y /Q /C /T
:: 
rem get date independently of OS Locale, Language or the user's chosen date format (Control Panel/Regional).
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-6" %%g in (`wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ^| findstr /r /v "^$"`) do (
  set _day=00%%g
  set _hours=00%%h
  set _minutes=00%%i
  set _month=00%%j
  set _seconds=00%%k
  set _year=%%l
  )
rem pad with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
set _hh=%_hours:~-2%
set _mm=%_minutes:~-2%
set _ss=%_seconds:~-2%
rem adjust _date as appropriate for your requirements
set _date=%_year%%_month%%_day%%_hh%%_mm%%_ss%
::
set directory=TEST
set source=%directory%
set destination=%Drive%\ARCHIVE_%_date%\%directory%

echo %BACKUPCMD% "C:\%source%\*.*" "%destination%" %BACKUPOPTIONS%

笔记:

  • 从你的问题来看我不确定你到底在寻找什么日期格式。
  • set _date=%_year%%_month%%_day%%_hh%%_mm%%_ss%进行适当更改以获取所需的日期格式。
  • echo当您对命令满意时,删除最后一个xcopy

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • 获取日期- 显示独立于操作系统区域设置、语言或用户选择的日期格式(控制面板/区域)的日期和时间。
  • 西米克- Windows 管理规范命令。
  • 复制- 将文件和/或目录树复制到另一个文件夹。

相关内容