MS Bat文件用户输入发送到文本文件导致ipconfig失败

时间:2015-07-29 14:03:19

标签: batch-file

我试图创建一个要求输入的bat文件,将输入放在一个文本文件中。然后在文本文件的末尾转储ipconfig的结果。这是我到目前为止所得到的。

@echo off
SET /P User=Type username.
@echo %User% >> C:\ipconfig.txt
ipconfig >> C:\ipconfig.txt
pause

当我运行此cmd窗口时,cmd窗口会挂起,文本文件包含此内容。

ant
Type username.

我在这里做错了什么。请帮忙。

谢谢你。 蚂蚁

1 个答案:

答案 0 :(得分:1)

antnt犯了两个错误:

  1. 批处理文件名为ipconfig.bat
  2. 调用内部批处理文件ipconfig时没有文件扩展名和完整路径。
  3. 命令处理器cmd.exe执行以下操作:从批处理文件或指定的命令提示符运行应用程序,而不使用示例ipconfig上的文件扩展名和完整路径。

    1. 它将字符串ipconfig与内部命令列表进行比较,例如direchorem等。
      在命令提示符窗口help中输入以查看标准命令列表,其中并非所有标准命令都是cmd.exe的内部命令。

    2. 它会在当前目录中搜索ipconfig.*

      • 如果存在肯定匹配,则会检查在当前目录中是否在ipconfig.之后附加了环境变量 PATHEXT 中列出的任何文件扩展名。
      • 如果附加.后附加的 PATHEXT 中的文件扩展名与当前目录中的文件名匹配,则执行此文件。
    3. 如果当前目录中没有文件与{strong> PATHEXT 中列出的扩展名匹配ipconfig.*,命令处理器会在环境变量<中指定的每个目录上递归应用上述搜索强> PATH

    4. PATHEXT 中文件扩展名的顺序决定了当前目录ipconfig.batipconfig.exe中有哪个可执行文件首先执行。

      PATH 中目录路径的顺序决定了其他目录的搜索顺序。

      可以通过打开命令提示符窗口并运行set path来查看 PATH PATHEXT 的值,其中列出了以字符串{{1开头的所有环境变量}}

      在调用其他批处理文件或应用程序来更改目录和/或文件扩展名之前,可以在命令提示符或本地批处理文件中修改 PATH PATHEXT 这些子进程的列表就像IDE在构建过程中调用编译器之前经常做的那样。

      因此,在这种情况下,批处理文件path在当前目录中执行,而不是在目录ipconfig.bat中执行ipconfig.exe

      有两种可能的解决方案:

      1. 批处理文件重命名为与%SystemRoot%\System32不同的内容。
      2. 控制台应用程序ipconfig.bat在批处理文件中指定了文件扩展名和完整路径。
      3. 对于第二个解决方案,批处理文件可能如下所示:

        ipconfig.exe

        或者在没有用户提示的情况下甚至更好:

        @echo off
        set /P "User=Type user name: "
        echo %User%>"%TEMP%\ipconfig.txt"
        set "User="
        %SystemRoot%\System32\ipconfig.exe>>"%TEMP%\ipconfig.txt"
        type "%TEMP%\ipconfig.txt"
        echo.
        del "%TEMP%\ipconfig.txt"
        pause
        

        我的建议:在批处理文件中,指定应用程序始终以完整路径执行,并且即使对于Windows的标准应用程序也可以使用文件扩展名,因为应用程序目录以及文件扩展名是众所周知的。这样可以避免将来可能出现的问题,因为 PATH 中的目录列表和/或 PATHEXT 中的文件扩展名已更改。