2011-06-14 134 views
2

我想将文件从一个目录移动到另一个目录,而不是* .log文件。 我已经尝试过XCOPY,因为它有一个EXCLUDE开关,但它不会复制,文件仍然保留为源文件夹。使用批处理文件移动* .log除外的文件

+0

最安全(最简单)的方法是使用XCOPY然后DEL旧文件。我个人不喜欢“移动”,就好像在移动命令(文件损坏等)期间发生的事情一样,您永久丢失了该文件。我听说过一些情况,在运行这个命令的时候人们已经停电,并且还丢失了丢失的文件o.0 – Mechaflash 2011-06-17 19:35:43

回答

0

你也许可以这样做:

mv | grep -v *.log | ./* /path 

要测试,如果你将要移动你可以做一个“LS”和管道,为给“grep”缺少了正确的文件“MV”

+0

没错,但我认为问题的作者希望在MS-DOS中有相同的命令环境,这意味着带有批处理文件命令的* .bat或* .cmd文件。 – UltraCommit 2011-06-14 14:01:30

0

http://www.pcreview.co.uk/forums/use-exclude-option-xcopy-t1469487.html

在上一个超链接,我可以与相关复读以下问题:

问题:

嗨,

我在下面使用xcopy命令,但它不会做我想要的。相反,它 抱怨“无法读取文件:.obj”然后停止。 xcopy c:\ t1 c:\ t2 /EXCLUDE:.obj

我希望复制过程中跳过所有.obj文件。有人能帮我吗? 谢谢。托尼

答:

的/排除指令指定包含的 文件名字符串来排除的文件列表。例如,要做你想做的事情,你需要创建一个文件,假设我们称之为MyExcludes.txt。在这个文件中, 只有一个filespec - “.obj”(不包括引号)。

然后更改命令以这样的:

XCOPY C:\ T1 C:\ T2 /EXCLUDE:MyExcludes.txt

===>这是一个部分解决方案,因为你复制所有,但。 obj文件,但不要将它们从源文件中删除。您可以尝试将XCOPY的输出重定向到文件,然后手动将DELETE添加到由XCOPY命令写入的文件的每一行。最后,您执行该文件以删除源文件。

+1

yup如果没有别的,那么可以做到这一点,但由于要移动的文件数量会非常高,所以看看是否有任何选项来移动它们,而不是2个周期:复制并写入文件,然后删除他们。 – 2011-06-14 14:41:50

3

为了让您一开始,试试这个蝙蝠

for %%a in (%1\*) do (
    if /I not "%%~xa"==".log" (
    ECHO move /Y %%~fa %2\%%~nxa 
) 
) 

经过仔细的检查,删除ECHO命令。

有关更多信息,请参阅HELP FORHELP IF以及用于从文件名中提取扩展名的语法,请参阅HELP CALL

+2

“经过认真测试,删除ECHO命令。” - 有史以来最好的建议。 – peterchen 2012-07-03 07:54:59

3

如果你可以使用ROBOCOPY,试试这个:

ROBOCOPY C:\Source C:\Dest * /MOV /XF *.LOG 
1

没有ROBOCOPY,你可以在批量关闭。这将采用传递的通配符,在其上运行dir,然后删除以.log结尾的目录列表中的条目。然后它会调用每一个移动。由于我们要逐个移动每个文件,因此我们需要确保目标存在并且是一个文件夹 - 否则移动可能会将其解释为移动并重命名。

请注意,如果您专门为其传递单个文件夹名称,则dir返回的内容可能不是您所期望的。不过,所有通配符都应该可以正常工作。

@if ("%~1") == ("") goto usage 
@if ("%~2") == ("") goto usage 
@if not ("%~3") == ("") goto usage 

@if not exist "%~2" mkdir "%~2" 
@dir /a:d "%~2" >nul 2>nul 
@if %errorlevel% neq 0 echo Directory %2 cannot be created or a file with that name already exists in that location. && exit /b 1 
@for /f "delims=" %%a in ('dir /b "%~1" 2^>nul ^| findstr /e /i /v ".log"') do @move /y "%%a" "%~2" >nul && echo %%a 
@goto :eof 

:usage 
@echo movewithoutlog.bat 
@echo Moves a set of files, omitting any with .log extension. 
@echo Usage: movewithoutlog.bat files destination 
@echo e.g. movewithoutlog.bat *.* ..\newdestination 
@exit /b 1