2011-04-18 25 views
-2

我使用Windows 7.我有一堆文本文件,每個文件包含一個電子郵件。每個開始是這樣的:批量重命名文件 - 附加行1和3

FROM:人 TO:另一個人 日期:01-JAN-11在18點12分零零秒 主題:無論

我想重命名這些文件,使他們的名字看是這樣的:從人

2011-01-01 18.12電子郵件到另一個人再Whatever.txt

批處理編程是我所知道的,我不知道這非常好。爲了將這個限制在一個我能夠快速理解的項目中,我認爲我最好的解決方案是將基本數據提取到一個文本文件中,然後我可以將它們按到批處理重命名文件中。

在這種情況下,我正在尋找的是一個批處理文件,它將數據提取到文本文件中的單行中,然後我可以用全局編輯按摩到形狀中。換句話說,我覺得我在這個格式尋找文本行:

[當前文件名] [中提取的日期和時間字符串] [從] [到] [主題]

例子:

file01.txt 01-Jan-11在18:12:00從人到另一個人無論什麼

如果我有這樣的行,我可以解析它們在Excel中很快重命名命令。

謝謝!

+0

我很少發佈問題 - 有人可以解釋downvotes嗎? – 2017-08-07 01:25:16

+0

我冒昧地猜測,這是因爲這是一個「給我代碼」式的問題:你要求別人爲你做所有的工作,沒有任何跡象表明你已經做出了自己的努力。這不是「僱用代碼」(或免費!)網站;這樣的要求令人不悅。您可以特別查看[幫助]和[幫助/在話題]主題頁面,瞭解一些額外的信息。 – Hellion 2017-10-04 17:58:04

+0

感謝您的猜測。這將是奇怪的推理。我以爲我說我打算做我知道該怎麼做的部分。對於其餘部分,爲什麼不會有人試圖指出我正確的方向,提供建議,或以其他方式做一些有益的事情?我的意思是,用戶*被邀請提問。 – 2017-12-18 04:36:27

回答

1

鑑於您使用Windows 7,我想我會建議一個替代方案。 Windows Powershell是一個非常有用的命令工具,可以用於很多東西。我想我解決了你的完整問題:

$folder = "C:\..." 

$regex = "FROM: (.*) TO: (.*) DATE: (.*) at (.*) SUBJECT: (.*)" 

$files = Get-ChildItem $folder *.txt 

ForEach ($file in $files) { 
     $line = (Get-Content $file.FullName -TotalCount 1) 
     $match = ([regex]$regex).matches($line)[0] 
     $date = [DateTime]($match.Groups[3]).Value + [TimeSpan]($match.Groups[4]).Value 
     $from = ($match.Groups[1]) 
     $to = ($match.Groups[2]) 
     $subject = ($match.Groups[5]) 

     # You can change the naming format in the brackets below 
     Rename-Item $file.FullName -NewName ($date.ToString("yyyy-MM-dd_HH-mm-ss") + " Email From " + $from + " to " + $to + " RE " + $subject) 
} 

它做出了一些假設(就像總會找到一個匹配)。您可以輕鬆調整命名格式和其他內容。將此代碼保存爲腳本(.ps1)並在Powershell提示符下運行(powershell.exe)

+0

我一直在想大概一年,我應該學習PowerShell。我見過幾個實例,它比舊的DOS批處理語言更加強大。學習如何使用它並使其工作可能只需要一兩天的時間。事情是,我只是不能 – 2011-04-18 18:58:25

+0

我很樂意爲PowerShell腳本提供更多幫助 - 你能發佈出錯的地方嗎? 除此之外,我認爲你最好的選擇是找到一個命令行工具,它可以讀取文件的第一行,然後將其管理爲文本文件。 – 2011-04-19 00:47:03

+0

只是注意到我沒有完成這個想法。我認爲我寫了(並且必須刪除)這樣的話:「我現在不能抽出時間。「我遲來的謝謝提供幫助。 – 2017-09-27 18:36:38