2016-11-22 84 views
0

首先感謝您的幫助。我試圖做的是:將基於文件名的單個目錄中的多個文件移動到多個文件夾

1)我有一個包含與名稱的文件夾:

122098_482056_1453458.xls 
122098_482057_1453459.jpg 
122098_482057_1453460.xls 
122098_482056_1453457.jpg 

2)我想將這些文件移動到了我與名創建的文件夾:

PO_90_122118_0_US 
PO_90_122122_0_US 
PO_90_122098_0_US 

注意:文件夾名稱的第三部分與文件名稱的第一部分相匹配。

我試過下面的腳本導致了一個錯誤,分別沒有做任何事情。

我已經使用delims=_作爲我的文件名由字符_分隔。使用 tokens=1以便使用文件名的第一部分。

@ECHO OFF 
SETLOCAL 
SET "sourcedir=D:\2009\2nd step batch - Copy" 
SET "destdir=D:\2009\1st step batch" 
FOR /f "delims=_" %%I IN (
    'dir /b /ad "%destdir%\*" ' 
) DO (
FOR /f "tokens=1delims=(" %%s IN ("%%~I") DO (
    IF EXIST "%sourcedir%\%%s*" ECHO(MOVE "%sourcedir%\%%s*" "%destdir%\%%I\" 
) 
) 

GOTO :EOF 

此批處理文件不輸出,這意味着沒有發現移動文件,我不知道爲什麼任何線。

批處理代碼將所有122098_*文件移動到文件夾PO_90_122118_0_US有什麼不對?

+0

由於StackOverflow不是免費的代碼編寫服務,因此您需要自行嘗試!當你被困住時,回到這裏,分享你的代碼,並精確地描述你面臨的問題!閱讀至少整個[旅遊網頁](http://stackoverflow.com/tour)並學習如何使用本網站!另請參閱以下幫助主題:[我可以在這裏詢問什麼主題?](http://stackoverflow.com/help/on-topic)[如何提出一個好問題?](http://stackoverflow.com/help/how-to-ask)[我應該避免詢問什麼類型的問題?](http://stackoverflow.com/help/dont-ask) – aschipfl

+0

我爲此道歉。我試過了一段代碼,但之前粘貼了錯誤,直到找到ctrl + k函數。我在上面的代碼中包含了我的嘗試。 – zlim

+0

爲什麼使用'delims =('雖然文件名中沒有'(')?/ F'循環的第一個(外部)沒有'tokens'選項,所以它默認爲'tokens = 1 ',這不是你想要的,我想...... – aschipfl

回答

0

這是您爲此任務重寫的批處理代碼。

@ECHO OFF 
SETLOCAL 
SET "SourceDir=D:\2009\2nd step batch - Copy" 
SET "DestDir=D:\2009\1st step batch" 
FOR /F "tokens=1-3* delims=_" %%A IN ('DIR /AD /B "%DestDir%\*" 2^>nul') DO (
    IF EXIST "%SourceDir%\%%C_*" MOVE "%SourceDir%\%%C_*" "%DestDir%\%%A_%%B_%%C_%%D\" 
) 
ENDLOCAL 

你可能會插入ECHO留給MOVE爲真正的移動在第二輪中的文件,而不ECHO之前測試的批處理文件。

對於在目標目錄中找到的每個子目錄,目錄名將被分割爲4個使用下劃線作爲分隔符的標記。爲FOR命令行上定義

  1. PO被分配給循環變量A
  2. 90被分配給ASCII table中的下一個循環變量,即B
  3. 122098或其他實際感興趣的數字被分配給循環變量C
  4. 並且在子目錄名稱中的第三個下劃線之後的所有內容都被分配給循環變量D而不會進一步分裂。

IF條件檢查是否存在與開始從分配給循環變量C和下劃線子目錄名數量的任何文件。如果此條件爲真,則會移動相應的文件。

將子目錄名稱的全部4個部分(即當前子目錄的完整名稱)指定爲目標目錄很重要。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • move /?
  • set /?
  • setlocal /?

2^>nul重定向由命令DIR混淆輸出錯誤消息來處理STDERR中沒有發現到設備NUL抑制它的子目錄的情況。重定向運算符>必須在這裏用^轉義,以便在執行命令DIR時被解釋爲重定向運算符,而不是作爲錯位重定向運算符的命令FOR。另請參閱Microsoft文章Using command redirection operators

相關問題