使用.bat将文件夹复制到新创建的目录

时间:2013-03-04 00:52:11

标签: batch-file

我使用MD创建一个目录。一旦你插入USB驱动器,你选择它,它创建驱动器的目录,但我试图将文件从源复制到USB上的新目录。我尝试了很多东西但似乎没什么用。 这是.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

它创建目录,但它不会将文件从源复制到新创建的目录。我怎样才能做到这一点?你怎么通过论证?这是我第一次写剧本。 谢谢!

2 个答案:

答案 0 :(得分:0)

这里有几个问题。

  1. 您正在将目标目录创建为%1\%DESTINATION%,但在XCOPY中您只指定了%DESTINATION%。复制时%1\可能不是当前目录,这必须解释为什么目标目标目录不接收任何文件。因此,您应在%1\中的%DESTINATION%前面添加XCOPY

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

  3. 可能不是问题,但我不确定。在=命令中SET DESTINATION后面有空格。那个空间实际上成了价值的一部分。您可能希望将其删除,除非您打算将目标目录名称以空格字符开头。

  4. 同样是半问题,名称末尾的尾随/是不必要的。这可能不是这个特定脚本中的问题,但一般来说,你必须更加谨慎地使用这样的路径作为更复杂路径的一部分,特别是当名称在更复杂的开头或中间时路径。使用\代替或者只是省略尾随分隔符就不那么麻烦了。

  5. 最后,您可以省略MD命令,让XCOPY为您创建目标目录(如果它不存在)。将/I开关添加到XCOPY以避免关于目标是文件还是目录的请求。

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

答案 1 :(得分:0)

试试这段代码,它对我有用。它确实复制了源文件夹中的所有文件。只需为source和dest变量分配适当的值即可。

@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