使用批处理文件移动不包含* .log的文件

时间:2011-06-14 13:33:34

标签: batch-file move

我想将文件从一个目录移动到另一个目录,不包括* .log文件。 我已经尝试过XCOPY,因为它有一个EXCLUDE开关,但它确实COPY而不是MOVE,文件仍然作为源文件夹。

5 个答案:

答案 0 :(得分:3)

为了帮助您入门,请尝试使用此球棒

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

仔细测试后,删除ECHO命令。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

您可以执行以下操作:

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

要测试你是否要移动正确的文件,你可以只做一个“ls”并将其传递给“grep”错过了“mv”

答案 4 :(得分:0)

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

在上一个超链接中,我可以阅读以下问题以及相关的答案:

问题:

您好,

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

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

解答:

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

然后将命令更改为:

xcopy c:\ t1 c:\ t2 /EXCLUDE:MyExcludes.txt

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