我试图创建一个要求输入的bat文件,将输入放在一个文本文件中。然后在文本文件的末尾转储ipconfig的结果。这是我到目前为止所得到的。
@echo off
SET /P User=Type username.
@echo %User% >> C:\ipconfig.txt
ipconfig >> C:\ipconfig.txt
pause
当我运行此cmd窗口时,cmd窗口会挂起,文本文件包含此内容。
ant
Type username.
我在这里做错了什么。请帮忙。
谢谢你。 蚂蚁
答案 0 :(得分:1)
antnt犯了两个错误:
ipconfig.bat
。ipconfig
时没有文件扩展名和完整路径。命令处理器cmd.exe
执行以下操作:从批处理文件或指定的命令提示符运行应用程序,而不使用示例ipconfig
上的文件扩展名和完整路径。
它将字符串ipconfig
与内部命令列表进行比较,例如dir
,echo
,rem
等。
在命令提示符窗口help
中输入以查看标准命令列表,其中并非所有标准命令都是cmd.exe
的内部命令。
它会在当前目录中搜索ipconfig.*
。
ipconfig.
之后附加了环境变量 PATHEXT 中列出的任何文件扩展名。.
后附加的 PATHEXT 中的文件扩展名与当前目录中的文件名匹配,则执行此文件。如果当前目录中没有文件与{strong> PATHEXT 中列出的扩展名匹配ipconfig.*
,命令处理器会在环境变量<中指定的每个目录上递归应用上述搜索强> PATH 强>
PATHEXT 中文件扩展名的顺序决定了当前目录ipconfig.bat
和ipconfig.exe
中有哪个可执行文件首先执行。
PATH 中目录路径的顺序决定了其他目录的搜索顺序。
可以通过打开命令提示符窗口并运行set path
来查看 PATH 和 PATHEXT 的值,其中列出了以字符串{{1开头的所有环境变量}}
在调用其他批处理文件或应用程序来更改目录和/或文件扩展名之前,可以在命令提示符或本地批处理文件中修改 PATH 和 PATHEXT 这些子进程的列表就像IDE在构建过程中调用编译器之前经常做的那样。
因此,在这种情况下,批处理文件path
在当前目录中执行,而不是在目录ipconfig.bat
中执行ipconfig.exe
。
有两种可能的解决方案:
%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
我的建议:在批处理文件中,指定应用程序始终以完整路径执行,并且即使对于Windows的标准应用程序也可以使用文件扩展名,因为应用程序目录以及文件扩展名是众所周知的。这样可以避免将来可能出现的问题,因为 PATH 中的目录列表和/或 PATHEXT 中的文件扩展名已更改。