2014-01-08 146 views
0

我需要一個批處理文件來爲目錄中的文件列表創建一個進程。基於文件名中的字符串創建文件夾

文件名結構是,例如:00000_AAA_132144_2012021.txt

我需要的批次:

1 - 創建基於第二下劃線之後的數字的文件夾名稱,因爲這是唯一的在恆定命名。

2 - 將文件移動到新文件夾中。

在的該批次將創建一個名爲132144文件夾,然後將文件移動00000_AAA_132144_2012021.txt到該文件夾​​

對於類似的規定上面的例子中,我使用Endoro對我來說(見下文)創建的腳本。是否有可能修改此以符合我的要求?

@echo off &setlocal 
for /f "delims=" %%i in ('dir /b /a-d *.PDF') do (
    set "filename1=%%~i" 
    setlocal enabledelayedexpansion 
    set "folder1=!filename1:~11,6!" 
    mkdir "!folder1!" 2>nul 
    move "!filename1!" "!folder1!" 
    endlocal 
) 

回答

0

如果您知道的文件名是相同的長度,你可以做以下的第二個下劃線後得到的數字 -

set filename=00000_AAA_132144_2012021.txt 
set dirname=%filename:~10,6% 

如果間隔可能會有所不同 - 你可以請執行以下操作 -

for /f "delims=_ tokens=3" %%a in ('echo %filename%') do set dirname=%%a 

是的,爲您編寫的腳本似乎與您所要求的基本相同 - 我編輯過它做你問什麼 -

@echo off 

setlocal enabledelayedexpansion 

for /f %%i in ('dir /b /a-d *.txt') do (
    set "filename=%%~i" 
    for /f "delims=_ tokens=3" %%a in ('echo !filename!') do set folder=%%a 
    mkdir "!folder!" 2>nul 
    move "!filename!" "!folder!" 
) 

這都將*.txt文件移動到基​​於文本的文件名的第三部分創建的文件夾。請注意,如果目錄中的.txt文檔不符合相同的命名標準,則會導致問題。

+0

由於間隔不變化,所以我已經使用嘗試了 \t \t/F 「delims = _標記= 3」 %%一個在( '回聲%文件名%')做設置目錄名= %%一個 @迴響 SETLOCAL enabledelayedexpansion FOR/F 「delims = _標記= 3」 %%一個在( '回聲%文件名%')都設置目錄名= %%一 組 「的文件名= %%〜i」 的 設置「folder =!filename!」 mkdir「!文件夾!」 2> nul 移動「!filename!」 「!夾!」 ) 但它似乎沒有正確定義新的文件夾名稱文件 –

+0

我編輯了我的答案。適用於我。請讓我知道這對你有沒有用。 – unclemeat

+0

是的!所有的好的感謝將節省我的時間! –

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=c:\sourcedir" 
SET "destdir=c:\destdir" 
FOR /f "delims=" %%a IN ('dir /b /a-d "%sourcedir%\*_*_*_*.txt" ') DO (
FOR /f "tokens=3delims=_" %%m IN ("%%a") DO (
    ECHO MD "%destdir%\%%m" 
    ECHO MOVE "%sourcedir%\%%a" "%destdir%\%%m\" 
) 
) 

GOTO :EOF 

Endoro的日常選擇.pdf文件,您所指定.txt

查找文件名匹配的面具,找到名字的第三_ - 分隔標記,使該目錄,然後將文件移動。

爲了測試目的,所需的命令僅僅是ECHO。在確認命令正確後,將ECHO MD更改爲MD以實際創建目錄並將ECHO MOVE更改爲MOVE以實際移動文件。

追加2>nul壓制錯誤信息(例如,當該目錄已經存在)

追加>nul打壓報告消息(如:1 file moved

相關問題