2015-06-08 62 views
1

我有幾個文件的名稱,如「Axis_Master Group_First_Report_201312.xlsx」, Axis_Master Group_second_Report_201312.xlsx。 我需要一個腳本來讀取文件名並根據文件名創建文件夾並將文件移動到該文件夾​​中。 在上面的例子中,我需要將第一個文件移動到名稱爲Axis的文件夾中,並且在Axis中,它應該先移到文件夾中。 對於第二個文件,它需要移動到同一個Axis文件夾,但它應該移動到一個新的文件夾「秒」。 請幫忙。 在此先感謝。批處理/電源外殼腳本基於文件名和移動文件創建文件夾

回答

0

此代碼將所有匹配"Axis_Master Group_$1_$2.$3"模式的文件移動到文件夾axis\$1中,並將其重命名爲$2.$3

@echo off 
md axis > Nul <&2 
for %%a in ("Axis_Master Group_*_*.*") do (
    call :refolder "%%a" 
) 
exit /b 

:refolder 
set fileName=%~n1 
set fileName=%fileName:Axis_Master Group_=% 
for /f "delims=_ tokens=1*" %%a in ("%fileName%") do (
    md axis\%%a > Nul <&2 
    move /y %1 axis\%%a\%%b%~x1 > Nul <&2 
) 
exit /b 
+0

謝謝。這有幫助。得到它與這個腳本一起工作。 @echo off SETLOCAL SET「sourcedir = c:\ Src」 PUSHD%sourcedir% for/f「tokens = 1-3 delims = _」%% i in('dir/b/ad * _ *。 xlsx')do( mkdir「%% i」> nul mkdir「%% i/%% j」> nul mkdir「%% i/%% j/%% k」> nul move「%% i_ * .xlsx「」%% i/%% j/%% k「> NUL ) –

2

我承擔所有的文件匹配*_*_*_*.xlsx,並要使用_作爲分隔符的第一和第三令牌。

第一個FOR只是迭代所有匹配的文件。隨後的FOR/F解析出第一個和第三個標記。它永遠不會反覆嘗試多次創建文件夾。我只是通過將stderr重定向到nul來隱藏任何錯誤消息。

@echo off 
for %%F in (*_*_*_*.xlsx) do for /f "tokens=1,3 delims=_" %%A in ("%%F") do (
    md "%%A\%%B" 2>nul 
    move "%%F" "%%A\%%B" 
) 
+0

我會將模式改進爲'?* _ * _?* _ *。xlsx'甚至是'?* _? * _?* _ *。xlsx'(和'delims = _「'而不是'delims = _'':) :) – JosefZ

+0

是的 - 我的DELIMS規範中出現了一個錯字,謝謝。我認爲它至少保證了下劃線之間有一個字符,但是這個字符可能是另一個下劃線,這仍然會產生問題,如果你重新y想要得到一個精確的文件掩碼,然後將外部循環切換到FOR/F執行DIR/B以適當的正則表達式傳送到FINDSTR。但在所有可能的情況下,我的原始代碼對於OP來說工作得很好。 – dbenham

相關問題