如何使用Windows命令行搜索文件,然后创建带位置的文本文档?

时间:2012-06-12 22:54:17

标签: windows file search command-line

我正在编写我的第一个批处理文件,因为我之前从未使用过Windows命令行,所以我遇到了一些问题。

这是我的情景。我在几个图像上使用这个批处理文件来安装一些东西。我希望批处理文件检查安装程序应该在的文件夹,如果不存在,我希望批处理文件在计算机中搜索安装程序。在那之后,我希望它运行所述安装程序。

这就是我所拥有的:

ECHO.
ECHO Starting Foo installation

IF EXIST Install\Installer.cmd (CALL Install\Installer.cmd & GOTO NextPart) ELSE (GOTO SearchInstaller)

:SearchInstaller
SET the_path =
E: & CD\
DIR /S/B Installer.cmd > installer_location.txt
IF EXIST installer_location.txt (SET /P the_path =< installer_location.txt & GOTO FoundIt)
C: & CD\
DIR /S/B Installer.cmd > installer_location.txt
IF EXIST installer_location.txt (SET /P the_path =< installer_location.txt & GOTO FoundIt)
D: & CD\
DIR /S/B Installer.cmd > installer_location.txt
IF EXIST installer_location.txt (SET /P the_path =< installer_location.txt & GOTO FoundIt)
ECHO Installation file not found.

:FoundIt
ECHO Batch file found at%the_path%
CALL %the_path%
ECHO Finished installation & ECHO. 
GOTO NextPart

:NextPart
(more stuff)

我认为问题在于,一旦我使用DIR找到它,它就不会保存路径。我已经研究了几天,我的谷歌搜索都充满了紫色链接。我发现的一切都说我的语法是正确的,但我知道我做错了。

我已尝试将ECHO Program execution reached this point.放在几个位置,所以我知道它到底在哪里,至少。我看到的问题是将文本文件的内容分配给the_path的行以及我尝试ECHO路径的行,所以我看到它有效。

1 个答案:

答案 0 :(得分:3)

SET /P命令中,变量名和等号之间有空格。这正是你所要求的,而不是你想要的:它设置一个名称以空格结尾的变量。摆脱额外的空间,我认为它会起作用。

附加条件: -

为了避免这个问题,尼尔指出(好抓!)试试这个:

DIR /S/B Installer.cmd > installer_location.txt
SET /P the_path=< installer_location.txt
if defined the_path goto :foundit

事实证明,如果找不到installer.cmd,则installer_location.txt为空,the_path未定义。如果你想要格外小心,试试

if defined the_path if exist "%the_path%" goto :foundit