【问题标题】:Empty a text file with Autohotkey?使用 Autohotkey 清空文本文件?
【发布时间】:2020-02-10 15:33:02
【问题描述】:

我正在尝试找到一种使用 Autohotkey 清空文本文件的方法。不幸的是,我找不到任何可以让你做到这一点的内置函数。我能想出的最佳解决方案是:

FileRead, TheText, file.txt
StringReplace, NewText, TheText, 'text to search for', 'replacement text', All
FileDelete, file.txt
FileAppend, %NewText%, file.txt

但是,这个解决方案对我不起作用,因为我正在编写一个工具来添加或删除 Windows 主机文件中的内容。删除主机文件当然是不可能的。

因此,我将主机文件内容加载到变量中,将我的程序所做的任何添加替换为该变量内的空字符串(以恢复原始主机文件内容)并将其写回主机文件。但为了做到这一点,我需要先清空文件,否则它只会将变量附加到现有内容。

对于那些对我的程序感到好奇的人:

该程序将启用/禁用 Outlook.com 或 hotmail.com 上的自动 Skype 登录功能。当然不会对邮件功能或 Skype 客户端造成任何问题。

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    这是一种使用文件对象的方法 (req ahk 1.1+)

    只需将此示例放在一个新的脚本文件中并运行它以查看它是如何工作的

    /* String1
     * String2
     * String3
     * String4
     * String5
     * String6
     * String7
     * String8
     * String10
    */
    
    msgbox % CutString(A_ScriptFullPath, "String7")
    
    CutString(filePath, Needle)
    {
        fileObj := FileOpen(filePath, "rw"), pointerPos := fileObj.Pos, RegExMatch(fileObj.read(), "O)" needle, match)
    
        fileObj.Seek(0), newText .= fileObj.read(match.pos-1), fileObj.Seek(match.pos + match.Len), newText .= fileObj.read()
    
        fileObj.Seek(pointerPos), fileObj.Write(newText), fileObj.length := StrLen(newText), fileObj.Close()
        return match.value
    }
    

    此函数使用正则表达式查找文件中“needle”字符串的位置和大小,然后在没有它的情况下重写和调整文件内容。

    您还可以重写该函数以简单地从文件中删除行。

    我希望这能满足您的需要

    【讨论】:

    • 这似乎是我的情况的完美解决方案。我现在无法对其进行测试,但我会在尝试后立即接受您的回答。非常感谢!
    • 糟糕,我忘记将此问题标记为已回答。无论如何,谢谢!
    【解决方案2】:

    重命名呢?我以前做过。

    hosts := "c:\windows\system32\etc\hosts"
    
    fileread, hostsText, %hosts%
    stringreplace, newText, %hostsText%, %searchtext%, %replacementtext%, all
    fileappend, %hostsText%, %hosts%.bak   ;make backup
    filedelete, %hosts%.temp               ;delete the temp file if it exists
    fileappend, %newtext%, %hosts%.temp    ;write new text to a blank file
    filemove, %hosts%.temp, %hosts%, 1     ;rename the new file to hosts - set flag to 1 to overwrite
    

    那你需要刷新DNS,不是吗?

    Run cmd /c ipconfig /flushdns
    

    【讨论】:

    • 虽然这个探测有效,但它并不是我问题的真正答案。我仍然认为制作备份文件以防万一是一个非常好的主意。因此,我会支持它:) 顺便说一句,我认为在 Windows Vista+ 上,主机文件会立即生效。无需为此刷新 dns。
    • 我以前做过这个尝试在多个主机文件之间切换。您可以有多个主机文件,为了在它们之间切换,您将其中一个重命名为临时名称,然后只需“附加”到一个新的、空白的主机名。它既简单又快速。它不会锁定您的主机文件。如果您进入文件阅读模式,文件将被锁定(无法编辑),直到您释放它。
    【解决方案3】:

    按照以下步骤操作:

    1. 运行,notepad.exe invalid_response.txt
    2. 睡觉,200
    3. 发送,^a
    4. 发送,{Del}
    5. 睡觉,200
    6. 发送,!{F4}
    7. 发送,{HOME}
    8. Sendraw,#
    9. 发送,^s
    10. 睡觉,200
    11. 发送,!{F4}
    12. 退出

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多