编写脚本以使用 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
有人能帮我解释一下语法吗?
您的批处理文件存在几个问题:
xcopy go 的选项后来源和目的地
XCOPY source [destination] [options]
你的
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 管理规范命令。
- 复制- 将文件和/或目录树复制到另一个文件夹。