2013-03-04 106 views
0

我使用MD创建目录。一旦你插入USB驱动器,你选择它,并创建目录到驱动器,但是我试图将文件从源文件复制到USB上的新目录。我尝试了很多东西,但似乎没有任何工作。 这里是.bat文件使用.bat将文件夹复制到新创建的目录

@echo OFF 


diskpart 

set source=C:\Users\Public\Documents 

set DESTINATION= %computername% %DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%/ 

@echo DESTINATION =%DESTINATION% 

:: Create new directory 
md "%1\%DESTINATION%" 

xcopy %source% %DESTINATION% /y 

它创建了目录,但它不将文件从源到新创建的目录复制。我怎样才能做到这一点?你如何传递一个论点?这是我第一次写剧本。 谢谢!

+0

您是否将任何参数传递给脚本? – 2013-03-04 00:58:07

+0

http://stackoverflow.com/questions/9114887/batch-to-copy-files-with-xcopy – 2013-03-04 01:14:05

回答

0

这里有几个问题。

  1. 你正在创建目的目录%1\%DESTINATION%XCOPY您所指定只是%DESTINATION%%1\很可能不是复制时的当前目录,这必须解释为什么预期的目标目录没有收到任何文件。因此,您应该在XCOPY的前面添加%1\%DESTINATION%

  2. 目标目录名称(由SET DESTINATION命令设置)包含空格。这意味着在大多数文件操作上下文中名称必须用双引号引起来。 “最”我的意思是有一些命令不需要名称被引用,但我仍然不会建议省略引号。而且XCOPY不是那些命令之一,因此,您的目标路径实际上应该是"%1\%DESTINATION%",就像在MD命令中一样。

  3. 可能不是问题,但我不确定。你在=之后的SET DESTINATION命令后面有一个空格。这个空间实际上成为价值的一部分。除非您的目的地名称以空格字符开头,否则您可能需要删除它。

  4. 同样的问题,名称末尾的尾部/是不必要的。在这个特定的脚本中这可能不是问题,但是通常你必须更加小心地使用这样的路径作为更复杂路径的一部分,特别是当名称在更复杂的开始或中间时路径。使用\来代替或者只是略去尾随分隔符,这样会更麻烦。

最后,你可能忽略MD命令,让XCOPY为您创建目标目录,如果不存在的话。将/I交换机添加到XCOPY以避免关于目标是文件还是目录的请求。

请注意,如果源目录完全为空,则不会创建目标。为确保它已创建,您还需要添加/E。但是,这也意味着复制整个目录结构,包括空的 sub目录(如果有的话)。如果这不符合您的意图,请坚持使用您当前的MD + XCOPY方法。

0

试试这个代码,它为我工作。它确实复制了源文件夹中的所有文件。只需将源变量和目标变量分配给适当的值即可。

@ECHO OFF 
setlocal enabledelayedexpansion 
set SOURCE="C:\Users\Public\Documents" 
SET DEST="%computername% %DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%" 

echo %SOURCE% %DEST% 

IF NOT EXIST %DEST% mkdir %DEST% 

xcopy %SOURCE%\*.* %DEST%\*.* /Y 
相关问题