2013-01-06 68 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

相关问题