我想将文件从一个目录移动到另一个目录,不包括* .log文件。 我已经尝试过XCOPY,因为它有一个EXCLUDE开关,但它确实COPY而不是MOVE,文件仍然作为源文件夹。
答案 0 :(得分:3)
为了帮助您入门,请尝试使用此球棒
for %%a in (%1\*) do (
if /I not "%%~xa"==".log" (
ECHO move /Y %%~fa %2\%%~nxa
)
)
仔细测试后,删除ECHO
命令。
有关详细信息,请阅读HELP FOR
,HELP 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命令写入的文件的每一行。最后,执行该文件以删除源文件。