windows上的递归移动命令

windows上的递归移动命令,windows,command-line,Windows,Command Line,我需要做一个.sh的.bat副本,我对Windows cmd了解不多。 在Linux上我可以做到 mv ... 或 但是Windows“移动”不能做同样的事情 也许有一个windows简单的替代方案,比 for /R c:\sourceFolder\ %%G in (*) do ( move /Y "%%G" c:\destinationFolder\ ) LinuxMV似乎在更新目录指针,但上面的Windows命令会做一些困难的事情吗?我想对于我需要经常移动的大文件夹来说,这不是一个好主意

我需要做一个.sh的.bat副本,我对Windows cmd了解不多。 在Linux上我可以做到

mv ...

但是Windows“移动”不能做同样的事情

也许有一个windows简单的替代方案,比

for /R c:\sourceFolder\ %%G in (*) do ( move /Y "%%G" c:\destinationFolder\ )

LinuxMV似乎在更新目录指针,但上面的Windows命令会做一些困难的事情吗?我想对于我需要经常移动的大文件夹来说,这不是一个好主意。XCOPY应该可以做到这一点,我一直在批处理文件中使用它

类似于,如果您只是尝试以.sh文件为目标

XCOPY /E /H /Y /C "%SOURCEDIR%\*.sh" "%TARGETDIR%"  

如果您有更多问题,请告诉我。使用
move
命令可以移动目录和文件

cd /d C:\sourceFolder
rem move the files
for %%i in (*) do move "%%i" C:\destinationFolder
rem move the directories
for /d %%i in (*) do move "%%i" C:\destinationFolder

Robocopy为我创造了奇迹:

 robocopy c:\cache c:\cache-2012 ?????-2012*.hash /S /MOV

我使用它将所有带有特定掩码的文件移出
c:\cache
及其众多子目录。

对于windows中的递归移动,一个简单的
move
命令就可以了。这是一个例子,我认为它会有所帮助

move D:\Dbbackup\*.dmp* D:\Dbbackup\year\month\
其中
.dmp
是文件的扩展名,该文件将被移动到递归文件夹Dbbackup的位置,然后是年份,然后是月份。

@echo off
@echo off
setlocal
set DIR=
set OUTPUTDIR=C:\Documents and Settings\<username>\Desktop\sandbox1\output
for /R %DIR% %%a in (*.jpg) do xcopy "%%a" "%OUTPUTDIR%"
setlocal 设置目录= set OUTPUTDIR=C:\Documents and Settings\\Desktop\sandbox1\output 对于(*.jpg)中的/R%DIR%%%a,请执行xcopy“%%a”“%OUTPUTDIR%”
我知道这是一条旧线,但由于它没有正确的答案,我想我会把它绑起来

完成此任务的旧DOS命令是:

   move <source directory> <destination directory>

文件夹和文件夹中的所有内容(包括子目录)都将被移动。

使用Vista中包含的
robocopy
,或旧的
xcopy
(这是有能力的,但需要更多的工作添加开关才能正常工作)。这不应该用于%i吗?(single%?)@rationalboss如果使用批处理文件,您需要%%,并且问题明确指出这是批处理文件。(请注意,原来的问题也将百分数增加了一倍。)啊,谢谢!我直接通过命令提示符尝试它,不知道为什么它不起作用。谢谢是否可以使用文件夹路径而不是(*)?因此“move*某处”确实会移动所有文件,但目录需要逐个移动。唉…对我来说最好的答案(因为它是最新windows版本的一部分)robocopy的主要问题是它实际上不移动文件,而是复制它们,然后删除原始文件。在同一驱动器中移动文件时,能够实际移动文件(即时)而不是复制文件(如果要移动大文件,速度会慢得多)是一个很大的区别。使用“move”命令的要点是,如果在同一驱动器中移动文件,速度会非常快,但不幸的是,在使用通配符时,它不会移动子目录。不过,xcopy不会移动文件,只是复制它们,因此您需要在以后删除源目录中的所有内容。这不是递归移动。子目录将不会随该命令一起移动。另外,move命令不支持这一点。请记住,如果目标文件夹存在,
move
将抛出“拒绝访问”
   move <source directory> <destination directory>
   move C:\sourceFolder c:\destinationFolder