系统即使在路径中也找不到路径

时间:2019-08-09 17:29:50

标签: windows batch-file cmd path

正在处理一个调用另一个批处理文件的批处理文件。

K:\Market Risk>call "K:\Market Risk\activate.bat
The system cannot find the path specified.

因此,我在批处理文件的开头设置了路径,并确保该路径在其中:

SET PATH=%PATH%;K:\Market Risk\

K:\Market Risk>echo %PATH%
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Shoreline Communications\
ShoreWare Client\;C:\Program Files\dotnet\;C:\Program Files (x86)\Microsoft SQL Server
\150\DTS\Binn\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\
WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\
Shoreline Communications\ShoreWare Client\;C:\Program Files (x86)\Common Files\Oracle\
Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;
C:\Program Files (x86)\Shoreline Communications\ShoreWare Client\;
C:\Users\Kyle.Dixon\AppData\Local\Microsoft\WindowsApps;C:\Users\Kyle.Dixon\AppData\Local\
Programs\Git\cmd;C:\Users\Kyle.Dixon\AppData\Local\atom\bin;C:\Users\Kyle.Dixon\Documents\
R\R-3.5.2\bin\R.exe;C:\Users\Kyle.Dixon\Documents\R\R-3.5.2\bin;C:\Users\Kyle.Dixon\
AppData\Roaming\MarketView\MarketView ExcelTools\;K:\Market Risk\

但是,我仍然遇到相同的错误:

K:\Market Risk>call "K:\Market Risk\activate.bat"
The system cannot find the path specified.

以前有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

我建议阅读What is the reason for "X is not recognized as an internal or external command, operable program or batch file"?,这应该有助于理解Windows如何管理环境变量PATH。遗憾的是,由于没有可用的命令来安全地添加/删除系统用户 {{1} }。缺少由Microsoft编写的用于通过应用所有必要的错误检查来安全更新PATH的命令或可执行文件的结果是,许多编码不好的脚本经常损坏系统用户 PATH存储在Windows注册表中,以尝试更新它们。

我的建议是以管理员身份打开Windows 控制面板-系统-高级系统设置-环境变量,并清除两个PATH环境变量,即用户 { {1}}(上部窗格)和系统 Path(下部窗格),如下所示:

        
  • 系统 Path应该始终从以下默认Windows文件夹路径开始:         
                  
    • %SystemRoot%\ System32
    •             
    • %SystemRoot%
    •             
    • %SystemRoot%\ System32 \ Wbem
    •             
    • %SystemRoot%\ System32 \ WindowsPowerShell \ v1.0 \
    •             
    • %SystemRoot%\ System32 \ OpenSSH \
    •         

            如果系统 Path以前无法正确使用这些文件夹路径启动,则过去曾对其进行过一次严重更新。 (最后一个文件夹路径仅从1809版开始在Windows 10上可用。)Path存储在Windows注册表中,在编辑系统 Path而不是C:\WINDOWS时显示表示安装程序可执行文件或脚本没有很好地更新系统 Path,因为扩展版本用引用环境变量%SystemRoot%替换了原始文件夹路径。这对于这些文件夹路径并不重要,但是对其他文件夹路径可能有害。
  •     
  • 在两个Path环境变量之一中,文件夹路径不应存在一次以上。
            删除用户 SystemRoot系统 Path中的所有重复项。

            您的两个Path环境变量包含三遍:         
                  
    • C:\ Program Files(x86)\ Common Files \ Oracle \ Java \ javapath
    •             
    • C:\ Program Files(x86)\ Shoreline Communications \ ShoreWare Client \
    •             
    • C:\ WINDOWS
    •             
    • C:\ WINDOWS \ system32
    •             
    • C:\ WINDOWS \ System32 \ OpenSSH \
    •             
    • C:\ WINDOWS \ System32 \ Wbem
    •             
    • C:\ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \
    •         

        系统 Path中已经存在的文件夹路径不应在 user Path中再次存在,当然在中也不再存在系统 Path
  •     
  • Path中列出的文件夹路径可以带有或没有反冲。我更喜欢Path末尾没有反斜杠的文件夹路径,因为这以后在通过批处理脚本使用命令Path来更新Path时会减少麻烦。     
  • 环境变量Path应该仅包含文件夹路径,而不能包含完整的限定文件名。
    因此regPath中完全是胡说八道。

在清理完两个C:\Users\Kyle.Dixon\Documents\R\R-3.5.2\bin\R.exe环境变量之后,系统 Path中的文件夹路径应类似于:

  • %SystemRoot%
  • %SystemRoot%\ system32
  • %SystemRoot%\ System32 \ Wbem
  • %SystemRoot%\ System32 \ WindowsPowerShell \ v1.0 \
  • %SystemRoot%\ System32 \ OpenSSH \
  • %CommonProgramFiles(x86)%\ Oracle \ Java \ javapath
  • %ProgramFiles(x86)%\ Microsoft SQL Server \ 150 \ DTS \ Binn
  • %ProgramFiles(x86)%\ Shoreline Communications \ ShoreWare客户端
  • C:\ Program Files \ dotnet

对于最后一条路径,最好保留Path且不要使用Path,除非有C:\Program Files%ProgramFiles%我不知道我的Windows计算机上没有这样的目录。出于这个原因,请参阅Microsoft关于WOW64 Implementation Details的文章。

用户 C:\Program Files\dotnet最终应类似于:

  • %LocalAppData%\ atom \ bin
  • %LocalAppData%\ Microsoft \ WindowsApps
  • %LocalAppData%\ Programs \ Git \ cmd
  • %AppData%\ MarketView \ MarketView ExcelTools
  • %UserProfile%\ Documents \ R \ R-3.5.2 \ bin

关于在其中执行两个批处理文件的环境的文章很少。所以下面写的大多数都是纯推测性的。

我假设驱动器C:\Program Files (x86)\dotnet不是本地硬盘上的驱动器,而是网络驱动器。因此,由于网络资源未映射到驱动器号Path或存在网络连接问题或网络资源许可问题,因此映射到驱动器K:的网络资源当前不可用。

Windows仅在用户登录时才将网络资源重新映射到驱动器号,因为网络驱动器映射是Windows在Windows注册表中存储的与用户帐户相关的映射。因此,如果批处理文件是使用其他帐户按计划任务执行的,或者还针对未登录的用户执行,则驱动器K:确实不存在。必须将执行批处理文件的计划任务配置为使用具有必要权限的帐户,以访问批处理文件访问的所有网络资源和本地目录/文件。此外,还必须使用其UNC路径访问网络资源上的文件和文件夹,而不是使用在这种环境下执行批处理文件时不存在的网络驱动器的驱动器号K:

另请参阅:What must be taken into account on executing a batch file as scheduled task?

但是也可能是错误消息

  

系统找不到指定的路径。

K:在处理包含命令行的批处理文件时未输出

K:

但在处理批处理文件cmd.exe时执行的命令行上。

因此,我建议从顶部的两个批处理文件call "K:\Market Risk\activate.bat" 中删除或将其更改为K:\Market Risk\activate.bat,然后在命令提示符窗口中运行主批处理文件,请参见debugging a batch file。然后应该100%清除哪个批处理文件中的哪个命令行负责此错误消息。