0

我使用 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

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

4

2 回答 2

0

这里有几个问题。

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

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

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

  4. 同样半问题,/名称末尾的尾随是不必要的。在此特定脚本中可能不是问题,但通常您必须更加小心地将此类路径用作更复杂路径的一部分,特别是当名称位于更复杂路径的开头或中间时小路。\使用它或只是一起省略尾随分隔符会不那么麻烦。

最后,如果目标目录不存在,您可以省略该MD命令并为您创建目标目录。XCOPY添加/I开关 toXCOPY避免询问目标是文件还是目录。

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

于 2013-03-06T09:39:01.817 回答
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
于 2013-03-06T10:28:25.917 回答