Windows .BAT将所有匹配掩码的目录从目录A移动到目录B.

时间:2009-09-30 23:14:48

标签: windows batch-file

我想编写.BAT文件,将C:\ WINNT \ Temp的所有子目录(名称与掩码匹配)移动到H:\ SOMEOTHERPLACE。

所以如果我的面具是ABC *,那么目录:

C:\WINNT\Temp\ABC1
C:\WINNT\Temp\ABC2
C:\WINNT\Temp\ABC3

应移至

H:\SOMEOTHERPLACE 

和其他一切(包括文件,而不是与掩码匹配的目录)不应该。我确实想要移动它们而不是复制它们。

有人能指出我正确的方向吗?

2 个答案:

答案 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中的每个目录名称,但这些目录将为空!请告诉我,我错了,但这就是我找到的!