Cmd 出现错误消息的原因是什么;系统找不到指定的路径";?

Cmd 出现错误消息的原因是什么;系统找不到指定的路径";?,cmd,directory,system32,Cmd,Directory,System32,我在文件夹system32中运行了文件夹run。当我在Total Commander中运行cmd时,打开一个命令提示符窗口,将C:\Users\admin作为当前目录,并希望进入该文件夹,将输出以下错误消息: 系统找不到指定的路径 当我直接在文件夹run中打开cmd时,它工作得非常好。为什么? 在C:\Windows\System32\run中打开命令提示窗口: C:\Windows\System32\run>cd.. C:\Windows\System32>cd run C:\

我在文件夹
system32
中运行了文件夹
run
。当我在Total Commander中运行
cmd
时,打开一个命令提示符窗口,将
C:\Users\admin
作为当前目录,并希望进入该文件夹,将输出以下错误消息:

系统找不到指定的路径

当我直接在文件夹
run
中打开
cmd
时,它工作得非常好。为什么?

C:\Windows\System32\run
中打开命令提示窗口:

C:\Windows\System32\run>cd..

C:\Windows\System32>cd run

C:\Windows\System32\run>
仅运行
cmd
时的命令提示窗口:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Všetky práva vyhradené.

C:\Users\admin>cd..

C:\Users>cd..

C:\>cd windows

C:\Windows>cd system32

C:\Windows\System32>cd run
Systém nemôže nájst’ zadanú cestu.
你只需要:

步骤1:键入cd,返回C:\的主目录。。(2次)

步骤2:它现在出现
C:\>

步骤3:键入
dir Windows\System32\run

仅此而已,它在目标文件夹中显示完整的文件和文件夹详细信息


详细信息:我使用了
Windows\System32\com
文件夹作为示例,您应该键入自己的文件夹名称等
Windows\System32\run

在Windows x64上不仅有1个
%SystemRoot%\System32
。有两个这样的目录

真正的
%SystemRoot%\System32
目录适用于64位应用程序。此目录包含64位
cmd.exe

但是对于32位应用程序也有
%SystemRoot%\SysWOW64
。如果32位应用程序访问
%SystemRoot%\System32
,则使用此目录。它包含一个32位的
cmd.exe

32位应用程序可以使用path中的别名
%SystemRoot%\Sysnative
访问64位应用程序的
%SystemRoot%\System32

有关详细信息,请参阅有关的Microsoft文档

因此,为64位应用程序在
%SystemRoot%\System32
中创建了子目录
run
,为32位应用程序运行了32位
cmd
,该目录不存在,因为在
%SystemRoot%\SysWOW64
中没有子目录
run
,而32位应用程序的
%SystemRoot%\System32
cmd.exe
子目录
run
是在
%SystemRoot%\System32
中为32位应用程序创建的,运行64位
cmd
时,此目录不存在,因为
%SystemRoot%\System32
中没有子目录
run
,因为此子目录仅存在于
%SystemRoot%\SysWOW64

如果64位应用程序的子目录
run
位于
%SystemRoot%\System32
中,则可以在批处理文件的顶部使用以下代码:

@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%" == "" if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative"
必须使用批处理文件中的
%SystemPath%
执行
System32\run
目录中的每个控制台应用程序,例如
%SystemPath%\run\YourApp.exe

它是如何工作的

Windows x86上没有环境变量ProgramFiles(x86),因此实际上只有顶部定义的一个
%SystemRoot%\System32

但是在Windows x64上定义了一个值为的环境变量ProgramFiles(x86)。因此,如果
%SystemRoot%\Sysnative
中存在文件,则在Windows x64上会额外检查该文件。在这种情况下,批处理文件当前由32位
cmd.exe
处理,只有在这种情况下才需要使用
%SystemRoot%\Sysnative
。否则也可以在Windows x64上使用
%SystemRoot%\System32
,因为当批处理文件由64位
cmd.exe
处理时,这是包含64位控制台应用程序的目录(以及子目录
run


注意:
%SystemRoot%\Sysnative
不是目录!无法将
cd
复制到
%SystemRoot%\Sysnative
或使用
如果存在%SystemRoot%\Sysnative
如果存在%SystemRoot%\Sysnative\
。它是一个仅适用于32位可执行文件的特殊别名,因此有必要使用
如果存在%SystemRoot%\Sysnative\cmd.exe
或更一般的
如果存在%SystemRoot%\Sysnative\*
,检查此路径上是否存在一个或多个文件。以下内容对我有效:

  • 打开注册表编辑器(按windows键,键入
    regedit
    并点击
    Enter
  • 导航到
    HKEY\u CURRENT\u USER\Software\Microsoft\Command Processor\AutoRun
    并清除值
  • 同时检查
    HKEY\U LOCAL\U MACHINE\Software\Microsoft\Command Processor\AutoRun

  • 这使我免于巨大的痛苦:)该死。。。这是一个伟大的观察。。。万分感谢!!