【问题标题】:Batch File To Read And Modify Text File批处理文件读取和修改文本文件
【发布时间】:2012-02-27 12:23:37
【问题描述】:

好的,基本上,我在纯文本记事本文件中有一个完整的链接列表,每个链接在单独的行上。我想要做的就是在每个链接之前添加一些文本,特别是:127.0.0.1 和几个空格。

所以这个...

somelink.com 

变成这样……

127.0.0.1     somelink.com 

现在您可能已经猜到我正在尝试编辑文本文件的内容以使其可用作 Windows 中的 HOSTS 文件。

所以我想要一些批处理文件代码,在 .bat 文件中可执行,它基本上读取记事本文本文件,然后在每行的开头添加“127.0.0.1”,上面有文本。我猜这对于对 MS DOS 和批处理文件代码有一定了解的人来说可能是一段非常简单的代码,但那肯定不是我,而且我曾经编写过的唯一批处理文件是在像现在这样的帮助下。

感谢您提前为此提供的所有帮助,非常感谢。

【问题讨论】:

    标签: file batch-file windows-xp hosts


    【解决方案1】:

    阅读HELP FOR,然后在命令提示符下尝试

      FOR /F "delims=" %a in (input.txt) do @echo 127.0.0.1   %a >>output.txt
    

    这里有一些解释和一些注意事项,以使用更完整的功能对其进行扩展并将其放入 BAT 文件中

    1. FOR 是遍历输入文本文件行的命令。在http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/for.mspx

    2. 阅读微软文档
    3. input.txt 是包含您的域名列表的文本文件,它必须位于当前目录中

    4. output.txt 将是包含前缀为 127.0.0.1 的域名列表的结果文件,它将在当前目录中创建

    5. 如果要创建 BAT 文件,需要移动 FOR 命令并稍作编辑,将 %a 循环变量名称更改为 %%a

    6. 然后您可以将 BAT 文件放在当前目录中,即您的输入所在的位置以及将创建输出的位置。

    7. 或者,您可以将 BAT 文件放在其他位置。在这种情况下,您需要使用其完整路径来调用它。

    8. 或者你甚至可以将它放在一个特殊的目录中(我有我自己的C:\Program Files\CMD)并将它添加到PATH系统变量中。请参阅此处 www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/path.mspx?mfr=true 如何更改当前会话的 PATH。在这里 ss64.com/nt/path.html 您可能会找到一些关于如何使 PATH 永久更改的解释。

    9. 1234563 BAT 文件的命令行参数。
    10. 然后用户可能想要使用文件名中包含空格的文件。他们可能会用引号" 在名称周围指定它们。在这种情况下,您需要在 FOR 命令中添加一些咒语 usebackq,以免在用户使用引号时造成破坏。

    11. 最后,您需要决定在输出文本文件已经存在的情况下该怎么做,您可能要考虑防止覆盖。

    因此,将所有这些部分放在一起,这是一个简短的 BAT 文件,可以帮助您入门...

        @echo off
        if .%2==. goto help
        if not exist %1 goto helpno1
        if exist %2 goto helpalready2
        FOR /F "usebackq delims=" %%a in (%1) do @echo 127.0.0.1   %%a >>%2
        goto :eof
        :help
        echo you need to specify input and output text files
        goto :eof
        :helpno1
        echo %1 not found
        goto :eof
        :helpalready2
        echo %2 already exist
        goto :eof
    

    欢迎来到 BAT 编程,尽情享受吧!

    【讨论】:

    • 我不明白你说的阅读帮助是什么意思 - 它是什么,我在哪里可以阅读它?谢谢。
    • 按照你所说的,PA,由于某种原因,我仍然没有设法让它工作。 :( 我需要事先对该代码进行任何编辑吗?我是否需要更改任何变量名称或类似的东西,或者创建文件 input.txt/output.txt?请注意,我是一个新手批处理文件代码,因此我从你那里得到的所有这些和下面的海报只是被复制和粘贴。
    • @Hashim 如果您从批处理文件运行它,请将您的 %a 更改为 %%a。
    • 非常感谢您的扩展帮助,PA。它确实有很大帮助。但是,我仍然无法理解大部分代码的含义。 :$ 我确实理解这里和那里的小部分,例如:'goto help'、'goto helpno1' 和 'helpalready2' - 我知道 goto 必须是某种内置函数,它告诉 CMD 转到特定底部的部分,当条件为真时。但是,我遇到的几乎所有其他问题。如果不是太麻烦,请您将每个命令分解成小块以便我理解?
    • 而且我更喜欢使用 output.txt 和 input.txt,至少现在,它为我在试图掌握代码的早期阶段省去了很多困惑。再次感谢您的帮助。
    【解决方案2】:

    我们开始吧!

    (
    Set /p line1=
    Set /p line2=
    Set /p line3=
    Set /p line4=
    )<Filename.txt
    echo 127.0.0.1    %line1%>Filename.txt
    echo 127.0.0.1    %line2%>>Filename.txt
    echo 127.0.0.1    %line3%>>Filename.txt
    echo 127.0.0.1    %line4%>>Filename.txt
    

    这将读取文本文件的前四行,然后将您的内容和每一行都放入它来自的行中。 玩得开心!

    【讨论】:

      【解决方案3】:

      除了 PA. 的回答,如果您需要特定数量的空格,您可以将它们放入变量中,并将其添加到命令中。

        SET spaces=          # to the left is 10 spaces
        FOR /F "delims=" %a in (input.txt) do @echo 127.0.0.1%spaces%%a>>output.txt
      

      所以输出将是

      127.0.0.1          somelink.com
      

      批处理文件风格:

        SET spaces=          # to the left is 10 spaces
        FOR /F "delims=" %%a in (input.txt) do @echo 127.0.0.1%spaces%%%a>>output.txt
      

      【讨论】:

      • 如果 OP 在批处理文件中需要它 %a 将需要为 %%a :)
      • 当然 =D 我会考虑一个批处理文件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2015-11-02
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      相关资源
      最近更新 更多