我制作了一个简单的Win Serv 2008 R2备份脚本(添加了内置的)
wbadmin start backup -backupTarget:\wineevhdsbackup -allcritical -systemState -include:c: -quiet
for /f "tokens=1* delims=" %%a in ('date /T') do set datestr=%%a
mkdir C:backup%datestr%
XCOPY "Z:backup" "C:backup%datestr%"
简单地说,我想将Z:\backup(映射磁盘)中的所有文件夹和文件复制到另一个自动命名为当前日期的文件夹中。只有最后一部分不起作用-它说的是当前路径。我应该更改什么?
致以最良好的问候。
date /T
命令的结果可能包含保留字符。参见命名文件、路径和命名空间
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
(backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
例如,如果您的日期包含/
(正斜杠),请将其替换为_
(低线,下划线),如下所示。
for /f "tokens=1* delims=" %%a in ('date /T') do set "datestr=%%a"
set "datestr=%datestr:/=_%"
rem add next line, cf. **edit**
set "datestr=%datestr: =%"
mkdir "C:backup%datestr%"
(注意并附上适当的间距和"
报价)。使用此资源:mkdir
时,应避免在文件夹名称中使用以下字符:© ® " - & ' ^ ( )
和@
,因为它们会导致问题。
编辑根据您对space
的评论,您是对的。对不起,我以前没有看到,甚至没有怀疑过。比较下一个(纯CLI)输出:
==>for /f "tokens=1* delims=" %a in ('date /T') do @echo [%a]
[06.03.2015 ]
==>for /f "tokens=1" %a in ('date /T') do @echo [%a]
[06.03.2015]
==>echo [%date%]
[06.03.2015]
==>
因此,添加set "datestr=%datestr: =%"
或,而不是
for /f "tokens=1* delims=" %%a in ('date /T') do set "datestr=%%a"
set "datestr=%datestr:/=_%"
set "datestr=%datestr: =%"
只需简单地使用
"datestr=%date:/=_%"
事实上,我不知道您的语言环境%date%
格式;它可能会在mar 6, 2015
和类似…的情况下失败