感谢这个答案使用 XCOPY 的路径无效经过大卫·波斯蒂尔,我的情况有所好转:
set/P Drive= Enter destination drive (with colon):
echo %Drive%
::
set BACKUPCMD=xcopy
set BACKUPOPTIONS=/S /D /I /Y /Q /C /T
:: ----------------------------------------------
:: Use WMIC to retrieve date and time
::
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF "%%~L"=="" goto s_done
Set _year=%%L
Set _month=00%%J
Set _day=00%%G
Set _hour=00%%H
SET _minute=00%%I
)
:s_done
:: Pad digits with leading zeros
Set _month=%_month:~-2%
Set _day=%_day:~-2%
Set _hour=%_hour:~-2%
Set _minute=%_minute:~-2%
Set _date=%_year%-%_month%-%_day% %_hour%:%_minute%
Echo point 1 %_date%
pause
::
:: _______Backup Operations _______________________
::
set directory=TEST
set source=%directory%
set destination=%Drive%\ARCHIVE_%_date%\%directory%
echo %BACKUPCMD% "C:\%source%\*.*" "%destination%" %BACKUPOPTIONS%
echo point 2
%BACKUPCMD% "C:\%source%\*.*" "%destination%" %BACKUPOPTIONS%
echo point 3
以下是我所看到的:
答案1
时间戳中的冒号(“:”)是驱动器号后的路径组件中的无效字符(原因很明显)。我会将其完全删除,以使其适合路径。
答案2
仍然遇到 XCOPY 困难
Set _date=%_year%-%_month%-%_day% %_hour%:%_minute%
...
set destination=%Drive%\ARCHIVE_%_date%\%directory%
您正在尝试创建一个包含:
字符的目录名。这是不允许的。
不能使用下列任何保留字符作为目录或文件名的一部分:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
您需要考虑另一种方法来命名您的目标目录。
命名约定
以下基本规则使应用程序能够创建和处理文件和目录的有效名称,而不管文件系统如何:
- 使用句点将目录或文件名称中的基本文件名与扩展名分隔开。
- 使用反斜杠 (
\
) 分隔路径的各个部分。反斜杠将文件名与其路径分开,并将路径中的一个目录名与另一个目录名分开。您不能在实际文件或目录的名称中使用反斜杠,因为它是将名称分隔成各个部分的保留字符。- 根据需要使用反斜杠作为卷名称的一部分,例如,通用命名约定 (UNC) 名称的
C:\
inC:\path\file
或\\server\share
in\\server\share\path\file
。有关 UNC 名称的更多信息,请参阅最大路径长度限制部分。- 不要假设区分大小写。例如,假设名称 OSCAR、Oscar 和 oscar 相同,即使某些文件系统(如 POSIX 兼容文件系统)可能认为它们不同。请注意,NTFS 支持区分大小写的 POSIX 语义,但这不是默认行为。有关更多信息,请参阅 CreateFile。
卷标识符(驱动器字母)同样不区分大小写。例如,“D:\”和“d:\”指的是同一个卷。
使用当前代码页中的任意字符作为名称,包括 Unicode 字符和扩展字符集 (128–255) 中的字符,但以下字符除外:
以下保留字符:
< (less than) > (greater than) : (colon) " (double quote) / (forward slash) \ (backslash) | (vertical bar or pipe) ? (question mark) * (asterisk)
整数值零,有时称为 ASCII NUL 字符。
整数表示形式在 1 到 31 范围内的字符,但允许使用这些字符的备用数据流除外。有关文件流的更多信息,请参阅文件流。
目标文件系统不允许的任何其他字符。
使用句点作为路径中的目录组件来表示当前目录,例如“.\temp.txt”。有关更多信息,请参阅路径。
使用两个连续的句点 (..) 作为路径中的目录组件来表示当前目录的父目录,例如“..\temp.txt”。有关更多信息,请参阅路径。
请勿使用以下保留名称作为文件名称:
CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9。还应避免在这些名称后紧跟扩展名;例如,不建议使用 NUL.txt。有关更多信息,请参阅命名空间。
- 不要以空格或句点结尾文件或目录名称。虽然底层文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。不过,可以将句点指定为名称的第一个字符。例如“.temp”。