【问题标题】:Renaming Multiple Files Based on Document Text String根据文档文本字符串重命名多个文件
【发布时间】:2014-04-22 01:23:33
【问题描述】:

我已经看到有一个叫做Bulk Rename Utility 的东西,但是我想重命名的数据文件是相对保密的,所以,也许不合理地,我对使用它持谨慎态度。同样,我不确定它是否允许我在重命名文件时以我希望的方式查找特定的字符串。因此,我想知道是否有一种替代方法几乎一样好,并且有某种方法可以确保一切都保密。如果没有,我愿意听取任何人使用批量重命名实用程序的经验。谢谢!

编辑:我还应该注意,虽然我是编程新手,但我对基于编程的解决方案非常开放。我还应该注意,所有有问题的文件都是 .html 文件。

更新:

这样的东西有用吗?

 for file in directory:
 f = fopen(file, 'r')
 line = f.readLine();
 while(line):
  if(line.strip() == '<th style="width: 12em;">Name:</th>'):
   nextline = f.readLine().strip();
   c = nextline.find("</td>")
   name = nextline[4:c]
   os.commandline(rename file to name)
   break
  line = f.readLine()

为了让这个在 Python 中运行良好,我还缺少什么吗?

更新:示例 html

&lt;html&gt; &lt;body&gt;
   &lt;h1 style="text-align: right;"&gt;[TITLE]&lt;/h1&gt;
    &lt;div style="font-size: 12pt;"&gt;
      &lt;div style="float: left;"&gt;[NUMBER]&lt;/div&gt;
      &lt;div style="float: right;"&gt;[DATE]&lt;/div&gt;
      &lt;div style="clear: both;" /&gt;
    &lt;/div&gt;
    &lt;hr /&gt;
    &lt;h3&gt;[INFO]&lt;/h3&gt;
    &lt;table class="text" cellspacing="0" cellpadding="0" border="0"&gt;
      &lt;tr&gt;
        &lt;th style="width: 12em;"&gt;Name:&lt;/th&gt;
        &lt;td&gt;[NAME]&lt;/td&gt;
      &lt;/tr&gt; &lt;/body&gt; &lt;/html&gt;

【问题讨论】:

  • Total Commander 是一个文件管理器,具有非常有效的多重重命名工具。它可以使用正则表达式,一次性重命名整棵树,并具有正常的文本重命名功能。作者是 IMO 值得信赖的人,它是功能齐全的共享软件。

标签: python windows batch-file rename file-rename


【解决方案1】:

对不起,你的问题不够清楚。多次阅读您的问题后,我假设您需要一种方法(可能是 Windows 批处理 .bat 文件):

  • 允许用户输入搜索字符串。
  • 处理多个扩展名为 .html 的文件。
  • 在每个文件中查找&lt;td&gt;&lt;/td&gt; 标记之间的值,这些值出现在搜索字符串的第一个匹配项之后的下一行中,并使用它来重命名文件。

下面的Batch文件做了这样一个过程:

@if (@CodeSection == @Batch) @then

@echo off

set /P "search=Enter search string: "
for /F "delims=" %%a in ('dir /B /A-D *.html') do (
   for /F "delims=" %%b in ('cscript //nologo //e:jscript "%~F0" "%%a"') do (
      if "%%b" neq "NoNameFound" (
         ECHO ren "%%a" "%%b"
      ) else (
         echo ERROR: No name found in file "%%a"
      )
   )
)
goto :EOF

@end

var file = new ActiveXObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments.Item(0)),
    search = WScript.CreateObject("WScript.Shell").Environment("Process")("search"),
    re = new RegExp(search+".+\n.+<td>(.+)<\/td>",""), result;

if (result = re.exec(file.ReadAll())) {
   WScript.Stdout.WriteLine(result[1]);
} else {
   WScript.Stdout.WriteLine("NoNameFound");
}
file.Close();

这是您的示例数据的输出:

C:\> test
Enter search string: <th style="width: 12em;">Name:</th>
ren "input.html" "[NAME]"

请注意,这个批处理文件只是显示ren 命令,但它不会执行它!您需要删除ren 之前的ECHO 部分才能执行它。

如果我遗漏了什么,请输入评论并修改我的规范。

【讨论】:

  • 为问题中的歧义道歉。你的答案似乎是我正在寻找的。在赏金文本中,我特别提到我正在寻找一个 tkinter GUI 来容纳与我最初问题的更新中的 Python 代码类似的代码。我可以看到这可能没有遇到,我完全接受批处理解决方案。这个想法只是搜索每个文件并将该文件重命名为整个文件夹。也就是说,选择文件夹并搜索每个文件并替换其名称。我将如何执行上面的批处理命令?谢谢!
  • 在包含 *.html 文件的同一文件夹中使用 anyName.bat 创建批处理文件。对于测试,打开一个命令行窗口,cd 到该文件夹​​并运行批处理文件;如果您愿意,可以将程序修改为通过双击执行。抱歉,我不懂 Python,但如果您愿意,批处理文件可以通过弹出的 GUI 输入框读取搜索字符串。
  • 这看起来会很好用!我刚刚用 ECHO 尝试过,我会在没有 ECHO 的情况下尝试过。
  • 每次运行时似乎都会发生的一个问题是,它会从所有探索的文档中剥离 html 文档格式。当我必须选择要打开它们的程序后尝试打开任何文档时,如果我在浏览器中打开它们,它只会显示原始 HTML,而不是 HTML 创建的样式。
  • 请注意,重命名使用位于&lt;td&gt;&lt;/td&gt; 标签之间的新名称无扩展名。如果数据中的名称没有 .html 扩展名,则必须在 ren 命令中插入此类扩展名:ECHO ren "%%a" "%%b.html"。这是不够清楚的细节类型......
【解决方案2】:

像老板一样使用powershell和cmd更改名称只需参考链接

http://www.howtogeek.com/111859/how-to-batch-rename-files-in-windows-4-ways-to-rename-multiple-files/

在阅读整页之前不要下结论。

【讨论】:

  • 这有一些有用的信息,但我相信我的问题有点复杂,我不确定是否可以通过这种方式解决。本质上,我希望 Windows 在每个文件中搜索关键字并在两个空格作为文件名出现之前返回所有字符。
猜你喜欢
  • 2016-11-10
  • 2022-09-25
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多