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

she*_*ard 3 windows batch-file

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

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

C:\WINNT\Temp\ABC1
C:\WINNT\Temp\ABC2
C:\WINNT\Temp\ABC3
Run Code Online (Sandbox Code Playgroud)

应该搬到

H:\SOMEOTHERPLACE 
Run Code Online (Sandbox Code Playgroud)

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

谁能指出我正确的方向?

she*_*ard 9

好的,我已经弄清楚了.如果您编写包含单行的movedirs.bat文件

for /d %%X in (%1) do move %%X %2\%%~nX 
Run Code Online (Sandbox Code Playgroud)

然后运行它(参数1是我要移动的目录的掩码,参数2是我希望将目录移动到的目录)

C:\>movedirs.bat C:\WINNT\Temp\ABC* H:\SOMEOTHERPLACE\
Run Code Online (Sandbox Code Playgroud)

它产生我想要的效果.

'for'上的/ d参数确保只处理目录.%% X变量上的'~n'修饰符表示原始子目录名称(而不是整个路径)用作第二个命令行参数中的目标.

只是为了后人调查这个,我做了类似于xcopy的事情,但后来我不得不参与删除源代码,所以为了我的目的,移动效果更好,但是对于记录,这里包含xcopy的相同想法.

for /d %%X in (%1) do xcopy %%X %2\%%~nX /E /I
Run Code Online (Sandbox Code Playgroud)

要使用以及不使用扩展名处理目录,例如上面的命令"C:\ MyDir*.MyExt"将需要一个组合(文件名+扩展名)修饰符"~nx":

for /d %%W in (%1) do xcopy %%W %2\%%~nxW /E /F /R /Y /I
Run Code Online (Sandbox Code Playgroud)