使用批处理文件移动* .log以外的文件

问题描述

| 我想将文件一个目录移动到另一个目录,而不是* .log文件。 我尝试了XcopY,因为它具有EXCLUDE开关,但它确实可以copY not MOVE,文件仍保留为源文件夹。     

解决方法

        如果可以使用ROBOCOPY,请尝试以下操作:
ROBOCOPY C:\\Source C:\\Dest * /MOV /XF *.LOG
    ,        为了让您入门,请尝试一下这只蝙蝠
for %%a in (%1\\*) do (
  if /I not \"%%~xa\"==\".log\" (
    ECHO move /Y %%~fa %2\\%%~nxa
  )
)
经过仔细的测试后,删除
ECHO
命令。 有关更多信息,请阅读
HELP FOR
HELP IF
,以及用于从文件名中提取扩展名的语法,请阅读
HELP CALL
。     ,        没有RoboCopy,您可以批量关闭。这将使用传递的通配符,在其上运行dir,然后删除以.log结尾的目录列表中的条目。然后,每个呼叫继续前进。由于我们要逐个移动每个文件,因此我们需要确保目标存在并且是文件夹-否则move可能会将其解释为move并重命名。 请注意,如果直接为它传递单个文件夹名称,则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
    ,        您可能会做类似的事情:
mv | grep -v *.log | ./* /path
要测试您是否要移动正确的文件,您可以执行\“ ls \”,然后将其通过管道传递到\“ grep \”,从而丢失\ mv \     ,        http://www.pcreview.co.uk/forums/use-exclude-option-xcopy-t1469487.html 在前面的超链接中,我可以阅读以下与相关的ANSWER相关的问题: 题: 你好 我在下面使用了xcopy命令,但它没有执行我想要的操作。相反,它 抱怨“无法读取文件:.obj”,然后停止。 xcopy c:\\ t1 c:\\ t2 /EXCLUDE:.obj 我希望在复制过程中跳过所有.obj文件。有人能帮我吗? 谢谢。托尼 回答: / EXCLUDE指令指定包含以下字符串的文件列表 要排除的文件名。例如,要做您想做的事,您将 需要创建一个文件,假设我们将其称为MyExcludes.txt。在这个档案中 只有一个文件规范-\“。obj \”(不带引号)。 然后将命令更改为此: xcopy c:\\ t1 c:\\ t2 /EXCLUDE:MyExcludes.txt ===>这是部分解决方案,因为您复制了除.obj文件以外的所有文件,但并未从源中删除它们。您可以尝试将XCOPY的输出重定向到文件,然后将DELETE手动添加到XCOPY命令编写的文件的每一行。最后,执行文件以删除源文件。