好的,如果您只想移动\test
目录中的所有文件夹和文件,那么以下命令将先复制所有文件,然后按批复制所有文件夹。for /d会复制文件夹、子文件夹和文件。
@echo off
move "d:\temp\test\*" "d:\temp\archive"
for /d %%a in ("D:\temp\test\*") do move "%%~fa" "d:\temp\archive\"
作为一则附注,从 cmd 运行以下命令时会出现错误。
move d:\temp\test\* d:\temp\archive
那是因为它会移动所有文件,但不包括目录。如果你得到了“文件名、目录名或卷标语法不正确”的提示,那么就只有文件夹而没有文件,你的移动命令看不到它们。
注意,在批处理文件中,“/Y”开关被禁用,如果存在文件夹,则不会替换文件夹。因此,如果您计划经常覆盖,请使用“xcopy”并更新存档,然后在文件成功复制后运行“d:\temp”中的删除操作。
最后,请始终将路径用双引号括起来。在这种情况下,它可以很好地工作,没有双引号也没问题,但如果您有像“move d:\program files\temp\* d:\temp\archives”这样的东西,它将因为program和files之间的空格而出错,因此最好使用“move"d:\program files\temp\*" "d:\temp\archive"”。
编辑:理解“%%~”分配。在这些示例中,我们使用“%%I”代替“%%a”。
%~I : expands %I removing any surrounding quotes (")
%~fI : expands %I to a fully qualified path name
%~dI : expands %I to a drive letter only
%~pI : expands %I to a path only
%~nI : expands %I to a file name only
%~xI : expands %I to a file extension only
%~sI : expanded path contains short names only
%~aI : expands %I to file attributes of file
%~tI : expands %I to date/time of file
%~zI : expands %I to size of file
%~$PATH:I : searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
if the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
The modifiers can be combined to get compound results:
%~dpI : expands %I to a drive letter and path only
%~nxI : expands %I to a file name and extension only
%~fsI : expands %I to a full path name with short names only
%~dp$PATH:I : searches the directories listed in the PATH
environment variable for %I and expands to the
drive letter and path of the first one found.
%~ftzaI : expands %I to a DIR like output line`
%%~fa
代表完全限定的路径。请记住,我们将%%a
分配给D:\temp\test\*
,其中*
是完整路径,因此%%~fa
是完整路径。因此,如果您有D:\temp\test\folder1
和D:\temp\test\folder2
,每个文件夹都会成为%%~fa
,为了查看其运作原理,请创建一个批处理并插入以下内容。它将只回显完整路径。@echo off for /d %%a in ("D:\temp\test\*") do echo %%~fa
- Gerhardfa”和“%%na”比“%%a”更安全? - jimzcc