Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
从Windows XP到Windows server 2012的所有Windows操作系统上FINDSTR的位置是什么?_Windows_Batch File_Findstr - Fatal编程技术网

从Windows XP到Windows server 2012的所有Windows操作系统上FINDSTR的位置是什么?

从Windows XP到Windows server 2012的所有Windows操作系统上FINDSTR的位置是什么?,windows,batch-file,findstr,Windows,Batch File,Findstr,从Windows XP到server 2012的所有操作系统的findstr目录是否始终C:\Windows\system32\ 或者换句话说,在windows批处理文件中替换以下表达式是否安全: findstr 到 而是将%windir%\system32\findstr.exe作为其可能的窗口安装在不同于C:\的驱动器上。仅为完整性提供额外信息 环境变量windir自Windows 95以来一直存在,它包含指向Windows目录的路径,该路径独立于它所在的驱动器及其名称 对于基于NT的Wi

从Windows XP到server 2012的所有操作系统的
findstr
目录是否始终
C:\Windows\system32\

或者换句话说,在windows批处理文件中替换以下表达式是否安全:

findstr


而是将
%windir%\system32\findstr.exe
作为其可能的窗口安装在不同于
C:\
的驱动器上。

仅为完整性提供额外信息

环境变量windir自Windows 95以来一直存在,它包含指向Windows目录的路径,该路径独立于它所在的驱动器及其名称

对于基于NT的Windows(NT4、Windows 2000、Windows XP、Vista、Windows 7/8/8.1),还有一个环境变量SystemRoot,它还包含Windows目录的路径,因为这是系统目录的父目录

  • System32
  • Sysnative(仅适用于Windows x64且仅适用于32位应用程序)
  • SysWOW64(仅限Windows x64)
有关文件系统重定向的详细信息,请阅读Microsoft的页面

这两种方法都是安全的

%windir%\System32\findstr.exe

我强烈建议在批处理文件中始终使用这两个字符串中的一个,因为这不取决于环境变量PATH中的文件夹以及环境变量PATHEXT中的文件扩展名


有些不好的安装程序在开始时将已安装应用程序的文件夹路径添加到系统环境变量path,而不是在末尾添加,并且在应用程序的文件夹中也包含
find.exe
findstr.exe
,它们是从Unix移植的,因此工作方式完全不同而不是Windows的
find.exe
findstr.exe
。AVRStudio是(或者可能未经最新版本的AVRStudio验证)IT管理员在安装后未使用Windows命令的始终完整文件名的一个示例。我恐怕不理解您问题的目的,因此我用稍微不同的方式重新表述它

如果在计算机中键入
findstr
并运行,则可以通过以下方式知道此类findstr命令的位置:

for %%a in (findstr.exe) do echo %%~$PATH:a
因此,可以替换以下表达式:

findstr
。。。接下来的两行:

for %%a in (findstr.exe) do set "findstrPath=%~$PATH:a"
%findstrPath%
。。。在Windows批处理文件中,您将得到完全相同的结果

因此,问题出现了:如果在两种情况下得到相同的结果,为什么要使用第二种更复杂的结果

还要注意,同一点适用于任何其他外部命令,如
find
xcopy
forfiles
,等等。为什么
findstr
在这一点上是特殊的


正如我之前所说,我不明白你的问题的目的…

或者文件夹也可能不是“Windows”。你应该在超级用户上问这个问题。他们肯定知道。我有一个没有PATH环境变量的操作系统,或者(findstr.exe)do echo%%~$PATH:a outputs me%%a中的%%a此时意外出现time@tvCa:是的。这就是为什么我这样写道:“如果在计算机中键入
findstr
,并且findstr命令运行…”。如果没有路径,那么键入
findstr
就不会运行findstr,因此@Brainless comment是一个没有大脑的注释!显然,当PATH变量中有多个目录,其中包含名称相同但内容不同的文件时,这就变得很棘手了。但在某种程度上,这就是这条道路的目的。你必须决定哪条路应该优先。。在小路上。如果您的Unix路径中有命名危险的变量。。。把它放在Windows路径之后,在路径中怎么样?@tvCa当然可以根据重要性对系统和用户路径中的目录进行排序。AVRStudio安装程序的问题是,安装的AVRStudio的
bin
目录在开始时被悄悄地添加到系统路径中,而不是在结束时。大多数IDE根本不会将包含二进制文件的目录添加到系统路径中,而那个些这样做的IDE会在末尾追加它们。大多数IDE在开始构建时将编译器的二进制目录插入到PATH的本地副本中。对于在生成任务期间作为生成前或生成后步骤执行的批处理文件,必须经常考虑这一点。@tvCa请查看我的问题和答案,我知道,在向路径添加路径时,只有很少的选项:要么在开始,要么在结束。理论上,人们可以诊断路径变量,并把它放在中间,但是这需要更多的代码。真正糟糕的供应商,把路径放在最开始,因为他们不关心操作系统,只关心他们愚蠢的小程序。如果你在一开始就设定了一条路径,那么一个人必须知道他在做什么。通常情况下,这并不好。除非是硬核操作系统相关的,或者是临时的。
findstr
for %%a in (findstr.exe) do set "findstrPath=%~$PATH:a"
%findstrPath%