问题描述
|
我想将文件从一个目录移动到另一个目录,而不是* .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命令编写的文件的每一行。最后,执行文件以删除源文件。