使用javascript在每个文件中使用<title> </title>重命名多个HTML文件

时间:2011-01-15 00:12:47

标签: javascript html

我已经使用HTTRACK从政府网站下载联邦法规,并且不会直观地命名生成的HTML文件。每个文件都有一个<TITLE></TITLE>标记集,可以很好地为每个文件命名,使其能够创建电子书。我想将这些规定变成我的Kindle电子书,这样我就可以随时提供相关规定,而不是随处携带大量书籍。

我首选的文本/十六进制编辑器UltraEdit Professional 15.20.0.1026,通过嵌入JavaScript引擎启用脚本命令。在研究我的问题的可能解决方案时,我在IDM UltraEdit网站上找到了xmlTitleSave

// ----------------------------------------------------------------------------
// Script Name: xmlTitleSave.js
// Creation Date: 2008-06-09
// Last Modified: 
// Copyright: none
// Purpose: find the <title> value in an XML document, then saves the file as the 
// title.xml in a user-specified directory
// ----------------------------------------------------------------------------

//Some variables we need
var regex = "<title>(.*)</title>" //Perl regular expression to find title string
var file_path = UltraEdit.getString("Path to save file at? !! MUST PRE EXIST !!",1);

// Start at the beginning of the file
UltraEdit.activeDocument.top();

UltraEdit.activeDocument.unicodeToASCII();

// Turn on regular expressions
UltraEdit.activeDocument.findReplace.regExp = true;

// Find it
UltraEdit.activeDocument.findReplace.find(regex);

// Load it into a selection
var titl = UltraEdit.activeDocument.selection;

// Javascript function 'match' will match the regex within the javascript engine 
// so we can extract the actual title via array
t = titl.match(regex);

// 't' is an array of the match from 'titl' based on the var 'regex'
// the 2nd value of the array gives us what we need... then append '.xml'
saveTitle = t[1]+".xml";

UltraEdit.saveAs(file_path + saveTitle);

// Uncomment for debugging
// UltraEdit.outputWindow.write("titl = " + titl);
// UltraEdit.outputWindow.write("t = " + t);

我的问题是双重的:

  1. 是否可以修改此JavaScript以从HTML文件中提取<TITLE></TITLE>内容并重命名文件?
  2. 如果JavaScript无法轻易修改,是否有脚本/程序/黑魔法/动物牺牲可以完成同样的事情?
  3. 编辑: 通过删除UltraEdit.activeDocument.unicodeToASCII();行并将文件扩展名更改为.html,我可以根据需要让脚本正常工作。我现在唯一的问题是,虽然这个脚本适用于单个打开文件,但它不会批处理目录。

4 个答案:

答案 0 :(得分:2)

您可以使用几乎任何“可编写脚本”的语言来快速完成这样的操作。 Ruby是我最喜欢的:

require 'fileutils'

dir = "/your/directory"
files = Dir["#{dir}/*.html"]

files.each do |file|
  html = IO.read file
  title = $1 if html.match /<title>([^<]+)<\/title>/i
  FileUtils.mv file "#{dir}/#{title}.html"
  puts "Renamed #{file} to #{title}.html."
end

显然,如果您的UltraEdit脚本对您有用,这可能会很钝,但对于任何运行不同env的人来说,希望这很有用。

答案 1 :(得分:1)

XML和HTML都是纯文本,并且该脚本只是在文本上运行正则表达式来提取标题标签,两者都是相同的;你唯一需要做的就是改变这一行:

saveTitle = t[1]+".xml";

到此:

saveTitle = t[1]+".html";

答案 2 :(得分:1)

这不是开箱即用的吗?

我对UltraEdit一无所知,但就正则表达式引擎而言,如果它可以从XML文档解析<title>(.*)</title>,它可以对HTML执行完全相同的操作。

只需将最终文件标题修改为.html而不是.xml

saveTitle = t[1]+".html";

假设你可以按照预期的那样使用该脚本(我不知道UltraEdit),我非常有信心同样的过程适用于HTML。

答案 3 :(得分:0)

在脚本方面进行了大量搜索和反复试验之后,我遇到了一个很棒的Windows程序,它将通过TITLE标签进行重命名:Flexible Renamer 8.3。作者的网站是http://hp.vector.co.jp/authors/VA014830/english/FlexRena/,它设法处理我需要的所有内容。非常感谢@coreyward和@Yuji在脚本编写方面的出色建议。