我在许多文件夹中都有*.oeaccount
个文件(XML文件)。我希望批处理文件读取XML文件中的文本并重命名包含该文件的文件夹。
xml文件包含类似于以下内容的文本:
<SMTP_Display_Name type="SZ">abc@cba.com</SMTP_Display_Name>
<SMTP_Email_Address type="SZ">abc@cba.com</SMTP_Email_Address>
<SMTP_Split_Messages type="DWORD">00000000</SMTP_Split_Messages>
</MessageAccount>
批次必须在此行中找到abc@cba.com
并忽略所有其他邮件:
<SMTP_Email_Address type="SZ">abc@cba.com</SMTP_Email_Address>
在行的开头有4个空格。
批处理必须提取电子邮件地址abc@cba.com
并将文件夹,每个文件夹重命名为XML文件中的文本。
文件夹树是这样的:
有人给了我这段代码,但它不起作用:
@echo off
setlocal
pushd "YourRootLocation"
set "search=<SMTP_Email_Address .*>[^ ][^ ]*@[^ ][^ ]*\.[^ ][^ ]*</SMTP_Email_Address>"
for /f "eol=: delims=" %%A in (
'findstr /srmbc:"%search%" file1.txt^|sort /r'
) do for /f "tokens=2 delims=<>" %%B in (
'findstr /rbc:"%search%" "%%A"'
) do if exist "%%A" for %%F in ("%%A\..") do if "%%~fF" neq "%CD%" (
echo ren "%%~fF" "%%B"
ren "%%~fF" "%%B"
)
popd
答案 0 :(得分:0)
如果我理解正确,您希望将每个*.oeaccount
文件的父文件夹重命名为该文件中的电子邮件地址。因为这样的事情应该有效:
for /r "C:\root\folder" %%f in (*.oeaccount) do (
for /f "delims=<> tokens=3" %%a in (
'findstr "<SMTP_Email_Address" "%%~ff"'
) do (
ren "%%~dpf" "%%~a"
)
)
但是,请注意,虽然它应该适用于这种特殊情况,但是面向行的XML文件处理(这是findstr
所做的)通常不是一个好主意,因为
<SMTP_Email_Address type="SZ">abc@cba.com</SMTP_Email_Address>
与
一样有效<SMTP_Email_Address
type="SZ">abc@cba.com</SMTP_Email_Address>
因此重新包装行可能会影响您的搜索模式。