我使用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
它创建目录,但它不会将文件从源复制到新创建的目录。我怎样才能做到这一点?你怎么通过论证?这是我第一次写剧本。 谢谢!
答案 0 :(得分:0)
这里有几个问题。
您正在将目标目录创建为%1\%DESTINATION%
,但在XCOPY
中您只指定了%DESTINATION%
。复制时%1\
可能不是当前目录,这必须解释为什么目标目标目录不接收任何文件。因此,您应在%1\
中的%DESTINATION%
前面添加XCOPY
。
由SET DESTINATION
命令设置的目标目录名称包含空格。这意味着在大多数文件操作上下文中,名称必须用双引号括起来。 “大多数”我的意思是有一些命令不需要引用名称,尽管我仍然不建议省略引号。并且XCOPY
无论如何都不是这些命令之一,因此,您的目标路径实际上应该是"%1\%DESTINATION%"
,就像在MD
命令中一样。
可能不是问题,但我不确定。在=
命令中SET DESTINATION
后面有空格。那个空间实际上成了价值的一部分。您可能希望将其删除,除非您打算将目标目录名称以空格字符开头。
同样是半问题,名称末尾的尾随/
是不必要的。这可能不是这个特定脚本中的问题,但一般来说,你必须更加谨慎地使用这样的路径作为更复杂路径的一部分,特别是当名称在更复杂的开头或中间时路径。使用\
代替或者只是省略尾随分隔符就不那么麻烦了。
最后,您可以省略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