使用批处理文件将嵌套文件夹和文件移动到新位置

时间:2013-12-26 01:54:58

标签: batch-file for-loop

我有200个用户,其文件和文件夹都位于我们服务器上用户区域中随机数量的嵌套文件夹和文件中。唯一的保证是每个用户都有以下三个文件夹。 My MusicMy PicturesMy Videos

我想写一个移动的批处理文件:

H:\My Music(及其所有内容)到H:\Music

H:\My Pictures(及其所有内容)到H:\Pictures

H:\My Videos(及其所有内容)到H:\Video

最后将所有剩余的文件和文件夹改为H:\Documents

我一直在摆弄以下命令,虽然它可以工作并遍历整个嵌套文件夹结构,但仅限于没有空格的文件和文件夹。我假设我需要添加token delims语句,但我无法正确使用语法。

FOR /f %%a IN ('dir "H:\My Music" /b') DO MOVE H:\My Music\%%a H:\Documents\Music

FOR /f %%a IN ('dir "H:\My Pictures" /b') DO MOVE H:\My Pictures\%%a H:\Documents\Pictures

FOR /f %%a IN ('dir "H:\My Videos" /b') DO MOVE H:\My Videos\%%a H:\Documents\Videos

FOR /f %%a IN ('dir "H:" /b') DO MOVE H:\%%a H:\Documents

如何处理文件和文件夹名称中的空格?

我知道我可以通过XCOPY实现这一目标,但空间是一个问题。更重要的是时间非常有限。我打算让所有用户在30分钟的培训课程中运行此脚本。由于大多数用户拥有几GB的文件,因此XCOPY将花费比30分钟会话期间更多的时间。

2 个答案:

答案 0 :(得分:1)

您可以像这样简化代码:

@echo off&cls
set "$Drive=h:\"
set "$folder=music Pictures Videos"

for %%a in (%$folder%) do echo MOVE "%$DRIVE%my %%a" "%$drive%Documents\%%a"
pause

我在移动之前放了一个回音,你可以测试输出是否合适

答案 1 :(得分:0)

您需要在包含空格的名称周围加上引号。

这样的事情应该有效:

FOR /f %%a IN ('dir "H:\My Music" /b') DO MOVE "H:\My Music\%%a" H:\Documents\Music

FOR /f %%a IN ('dir "H:\My Pictures" /b') DO MOVE "H:\My Pictures\%%a" H:\Documents\Pictures

FOR /f %%a IN ('dir "H:\My Videos" /b') DO MOVE "H:\My Videos\%%a" H:\Documents\Videos

FOR /f %%a IN ('dir "H:" /b') DO MOVE "H:\%%a" H:\Documents