2013-01-06 67 views
0

我有很多文件夾都有一個file.txt。這file.txt的有MULTY線並沒有這樣的批量更改文件夾名稱通過從文本文件讀取行

SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address 

和每封電子郵件的線在這條線比其他的deffernt中的每個文件
我如何可以讀取電子郵件地址或者搜索一下來自文本文件的電子郵件並通過此名稱重命名文件夾?

如果我們在命名爲(A)的文件夾中有這樣的行,我希望批處理讀取[email protected]並重命名(A)文件夾。

它會是這樣(查找file.txt的*@*.* /第一的e-mail地址批量發現
如果u找到>>文件夾重命名爲任意名稱)

回答

1

這是未經測試,但我相信它會工作:

@echo off 
pushd "your root location" 
for /f "tokens=1* delims=:" %%A in (
    'findstr /srbc:"SMTP_Email_Address *type=SZ *[^ ][^ ]*@[^ ][^ ]*\.[^ ][^ ]* *SMTP_Email_Address" filel.txt^|sort /r' 
) do if exist "%%A" for %%F in ("%%A\..") do (
    for /f "tokens=3" %%N in ("%%B") do ren "%%~fF" "%%N" 
) 
popd 

的FINDSTR/S選項搜索所有子文件夾 「file.txt的」爲電子郵件地址行。完整的文件路徑以每個找到的行爲前綴。 SORT/R導致子文件夾在父母之前被列出。這很重要,這樣我們就不會在重命名父文件夾後重命名子文件夾。

IF EXIST「%% A」可防止在文件夾已被命名後重命名文件夾(該文件夾被重命名爲找到的第一個電子郵件地址)。

最外面的FOR/F將找到的行分割爲「file.txt」和文本行的路徑。下一個FOR提取文件的父文件夾,最後一個FOR提取電子郵件地址。

如果同一電子郵件地址出現在多個文件夾中,該腳本當然無法重命名第二個文件夾。

+0

不工作抱歉 - 我怎麼不能告訴批次,如果我有@和點這是一個電子郵件,這是名稱我想成爲文件夾名稱 – Hauari

+0

我認爲這是我想要的..但​​需要修復請 – Hauari

+0

@Hauari - 我不明白你的第一條評論。我不明白什麼是不工作。我編輯了正則表達式來驗證地址是'*@*.*'格式,沒有任何空格。 – dbenham

0

執行oneliner之前:

sgeorge-mn:stack sgeorge$ ls -l 
total 0 
drwxr-xr-x 3 sgeorge wheel 102 Jan 6 14:18 fol1 
drwxr-xr-x 3 sgeorge wheel 102 Jan 6 14:18 fol2 
drwxr-xr-x 3 sgeorge wheel 102 Jan 6 14:18 fol3 

sgeorge-mn:stack sgeorge$ cat */file.txt 
SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address) 
SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address) 
SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address) 

Oneliner:

sgeorge-mn:stack sgeorge$ for i in `ls -1`; do NAME=`awk '{ print $3}' $i/file.txt | awk -F\@ '{ print $1}'` && mv $i $NAME ; done 

執行oneliner後:

sgeorge-mn:stack sgeorge$ ls -l 
total 0 
drwxr-xr-x 3 sgeorge wheel 102 Jan 6 14:18 abc 
drwxr-xr-x 3 sgeorge wheel 102 Jan 6 14:18 lmn 
drwxr-xr-x 3 sgeorge wheel 102 Jan 6 14:18 xyz 

sgeorge-mn:stack sgeorge$ cat */file.txt 
SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address) 
SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address) 
SMTP_Email_Address type=SZ [email protected] SMTP_Email_Address) 
+0

是這批號? – Hauari

+0

哦..你要批量編碼。抱歉,是我的錯。我忽視了,並認爲你想要bash。 – Suku

相關問題