Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file MS Bat文件用户输入发送到文本文件,导致ipconfig失败_Batch File - Fatal编程技术网

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

Batch file MS Bat文件用户输入发送到文本文件,导致ipconfig失败,batch-file,Batch File,我试图创建一个bat文件,请求输入,将输入放入文本文件。然后将ipconfig的结果转储到文本文件的末尾。这是我到目前为止得到的 @echo off SET /P User=Type username. @echo %User% >> C:\ipconfig.txt ipconfig >> C:\ipconfig.txt pause 当我运行此命令时,cmd窗口将挂起,文本文件包含此命令 ant Type username. 我做错了什么。请帮忙 万分感谢。 ant犯

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

@echo off
SET /P User=Type username.
@echo %User% >> C:\ipconfig.txt
ipconfig >> C:\ipconfig.txt
pause
当我运行此命令时,cmd窗口将挂起,文本文件包含此命令

ant
Type username.
我做错了什么。请帮忙

万分感谢。 ant犯了两个错误:

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

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

  • 它在当前目录下搜索
    ipconfig.*

    • 如果存在正匹配,它将检查在当前目录中是否找到在
      ipconfig.
      之后追加的环境变量pathText中列出的任何文件扩展名
    • 如果PATHEXT中的文件扩展名在附加的
      之后与当前目录中的文件名匹配,则执行此文件
  • 如果当前目录中没有与
    ipconfig.
    匹配且扩展名列在PATHEXT中的文件,则命令处理器将对环境变量PATH中指定的每个目录递归应用上述搜索

  • 如果当前目录
    ipconfig.bat
    ipconfig.exe
    中存在文件扩展名,则PATHEXT中文件扩展名的顺序决定首先执行哪个可执行文件

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

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

    在调用其他批处理文件或应用程序之前,可以在命令提示符下或本地批处理文件中修改PATHPATHEXT,以更改这些子进程的目录和/或文件扩展名列表,例如IDE在生成过程中调用编译器之前经常做的事情

    因此,在本例中,批处理文件
    ipconfig.bat
    在当前目录中执行,而不是在目录
    %SystemRoot%\System32
    中执行

    有两种可能的解决方案:

  • 批处理文件被重命名为与
    ipconfig.bat
    不同的名称
  • 控制台应用程序
    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
    
    或者在没有用户提示的情况下更好:

    @echo off
    echo User %USERNAME% on computer %COMPUTERNAME%>"%TEMP%\ipconfig.txt"
    %SystemRoot%\System32\ipconfig.exe>>"%TEMP%\ipconfig.txt"
    type "%TEMP%\ipconfig.txt"
    echo.
    del "%TEMP%\ipconfig.txt"
    pause
    

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

    您调用了批处理文件ipconfig,不是吗?试试别的名字。哈哈。这么简单。谢谢。如果我理解正确的话。它是在调用自身而不是函数。是的。确切地Function=在您的案例中是可执行的。我们都在某个阶段这样做