1

多くのフォルダーに*.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 ファイル内のテキストです。

フォルダ ツリーは次のようになります。

  • フォルダ / 1.oeaccount
  • フォルダ / 2.oeaccount
  • フォルダ / 3.oeaccount

誰かが私にこのコードをくれましたが、うまくいきません:

@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
4

1 に答える 1

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>

と同じくらい有効な XML です。

<SMTP_Email_Address
    type="SZ">abc@cba.com</SMTP_Email_Address>

そのため、行を再ラップすると検索パターンが失敗する可能性があります。

于 2013-02-17T12:57:56.527 に答える