2011-06-14 137 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