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

时间:2015-07-10 03:09:08

标签: windows batch-file findstr

从Windows XP到服务器2012的所有操作系统的C:\Windows\system32\目录始终是findstr 吗?

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

C:\Windows\system32\findstr

{{1}}

3 个答案:

答案 0 :(得分:3)

仅为完整性而提供额外信息。

环境变量 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的File System Redirector页面。

不仅可以安全使用

%windir%\System32\findstr.exe

%SystemRoot%\System32\findstr.exe

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

有一些糟糕的安装程序在开始时将已安装的应用程序的文件夹路径添加到系统环境变量 PATH ,而不是在结尾添加并包含在应用程序的文件夹中{{1或者find.exe这些是来自Unix的移植,因此与Windows的findstr.exefind.exe完全不同。 AVRStudio是(或许未经过最新版本的AVRStudio验证)打破IT管理员批处理文件的示例,安装后不使用Windows命令的完整文件名。

答案 1 :(得分:2)

而不是lapply(seq_along(dat), function(x) { sapply(seq_along(delete_n), function(y) { x[y] }) }) ,因为它可能安装在不同于%windir%\system32\findstr.exe驱动器的窗口上。

答案 2 :(得分:0)

我担心我不理解你问题的目的,所以我会以稍微不同的方式对其进行改写。

如果您在计算机中键入findstr并运行FINDSTR command,那么您可以通过这种方式知道此类findstr命令的位置:

for %%a in (findstr.exe) do echo %%~$PATH:a

因此,您可以替换以下表达式:

findstr

......接下来两行:

for %%a in (findstr.exe) do set "findstrPath=%~$PATH:a"
%findstrPath%

...在Windows批处理文件中,您将完全得到相同的结果。

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

另请注意,同一点适用于任何其他外部命令,例如findxcopyforfiles等。为什么findstr在这一点上会特殊?< / p>

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