我想编写.BAT文件,将C:\ WINNT \ Temp的所有子目录(名称与掩码匹配)移动到H:\ SOMEOTHERPLACE。
所以如果我的面具是ABC *,那么目录:
C:\WINNT\Temp\ABC1
C:\WINNT\Temp\ABC2
C:\WINNT\Temp\ABC3
应移至
H:\SOMEOTHERPLACE
和其他一切(包括文件,而不是与掩码匹配的目录)不应该。我确实想要移动它们而不是复制它们。
有人能指出我正确的方向吗?
答案 0 :(得分:8)
好的,我已经弄明白了。如果您编写包含单行
的movedirs.bat文件for /d %%X in (%1) do move %%X %2\%%~nX
然后运行它(参数1是我要移动的目录的掩码,参数2是我希望将目录移动到的目录)
C:\>movedirs.bat C:\WINNT\Temp\ABC* H:\SOMEOTHERPLACE\
它产生我想要的效果。
'for'上的/ d参数确保只处理目录。 %% X变量上的'~n'修饰符表示原始子目录名称(而不是整个路径)用作第二个命令行参数中的目标。
为了后人在调查这个问题时我做了类似于xcopy的事情,但后来我不得不参与删除源码,所以为了我的目的,移动效果更好但是对于记录来说这是围绕xcopy的相同想法。
for /d %%X in (%1) do xcopy %%X %2\%%~nX /E /I
要处理带有扩展名的目录,例如上面的“C:\ MyDir * .MyExt”命令将需要一个组合(文件名+扩展名)修饰符“~nx”:
for /d %%W in (%1) do xcopy %%W %2\%%~nxW /E /F /R /Y /I
答案 1 :(得分:0)
[评论对结构化答案毫无用处,所以我会在这里重复评论 - 进行一些编辑!]
感谢您的回答,但我发现您不能在源代码上使用带有通配符的xcopy。或者更确切地说,您可以使用通配符,但只能创建没有任何内容的目录。所以,如果你这样做......
H:\SOMEOTHERPLACE>xcopy C:\WINNT\Temp\ABC1 /E
...你会将ABC1目录复制到你当前的目录,正如你可能合理预期的那样,但如果你这样做了......
H:\SOMEOTHERPLACE>xcopy C:\WINNT\Temp\ABC* /E
...您将获得当前目录中出现的C:\ WINNT \ Temp中的每个目录名称,但这些目录将为空!请告诉我,我错了,但这就是我找到的!