【问题标题】:How do I specify C:\Program Files without a space in it for programs that can't handle spaces in file paths?如何为无法处理文件路径中空格的程序指定没有空格的 C:\Program Files?
【发布时间】:2010-10-27 21:53:58
【问题描述】:

一个配置文件需要另一个文件的位置,

但该文件位于“C:\Program Files”中,

其中有空格的路径无法识别,

还有没有其他方法可以指定没有空格的位置?

【问题讨论】:

    标签: windows


    【解决方案1】:

    你应该可以使用

    • "c:\Program Files"(注意引号)
    • c:\PROGRA~1(简称)

    试试 c:\> dir /x(在 dos shell 中)

    这会显示短名称 为非 8dot3 文件名生成。 格式是 /N 与 在长之前插入的短名称 姓名。如果没有短名称, 空白显示在它的位置。

    【讨论】:

    • 你能解释一下为什么“c:\PROGRA~1”和“c:\Program Files”意思一样吗?
    • 你能确定短名称永远不会改变吗,这对于配置文件很重要?
    • 短名称可能与您的示例不同,例如如果您还有一个名为 C:\ProgramFiles (没有空格)或类似的文件夹,您可能会得到 C:\PROGRA~2 for "C:\Program Files"
    • @ChrisF:如果我能对你的评论投反对票,我会的。您从哪里得到“Windows 仍然使用旧的 8.3 字符名称格式”的想法?相反,可以将文件系统配置为根本不使用它。
    • @mghie - 好吧,也许“使用”这个词太强了。该格式仍然可用,并且 Windows 可以识别它,因此在这个意义上它“使用”它。我想如果你把它拿走,Windows 仍然可以工作,但我偷偷怀疑仍然有一些旧代码无法识别潜伏在操作系统深处的长名称。
    【解决方案2】:

    没有。

    有时您可以引用文件名。

    "C:\Program Files\Something"
    

    有些程序会容忍引号。由于您没有提供任何特定程序,因此无法判断报价是否适合您。

    【讨论】:

    • 正如我在回复中所说,可以使用短名称表示法。
    • @bgy:这很清楚——这就是 SO 的工作方式。为什么你也在这里发表评论?你的回答还不够吗?
    【解决方案3】:

    尝试用引号括住路径。即“C:\Program Files\Appname\config.file”

    【讨论】:

      【解决方案4】:

      使用生成的短名称 (C:\Progra~1) 或用引号将路径括起来。

      【讨论】:

      • “短名称”很可能不正确,甚至文件系统不支持。这个答案应该被删除。
      • @lit 我只是建议使用生成的短名称,而不是应该硬编码。可能是短名称机制并非在当今运行 .NET 的所有平台上都可用,但请记住,答案是 9 年前的。您提供的答案是一个很好的答案,但您确实可以努力提高对他人的态度。也就是说,这个答案在这里没有任何价值,所以它最终会被删除。
      【解决方案5】:

      你可以尝试使用:

      C:\PROGRA~1
      

      【讨论】:

        【解决方案6】:

        应该有办法直接使用完整的c:\program files 路径。通常,它涉及将字符串封装在引号中。例如,在 windows 命令行上;

        c:\program files\Internet Explorer\iexplore.exe 
        

        不会启动 Internet Explorer,但

        "c:\program files\Internet Explorer\iexplore.exe" 
        

        会的。

        【讨论】:

          【解决方案7】:

          我认为其他帖子已经回答了这个问题,但只是一些有趣的信息供您参考(来自命令提示符):

          目录 c:\ /ad /x

          这将提供仅目录的列表,并提供它们的“短名称”。

          【讨论】:

            【解决方案8】:

            Windows shell(假设您使用 CMD.exe)使用 %ProgramFiles% 指向 Program Files 文件夹,无论它在哪里。由于默认的 Windows 文件打开器会考虑这样的环境变量,如果程序写得好,它应该支持这一点。

            另外,使用相对地址可能是值得的。如果您正在使用的程序安装正确,它应该已经在 Program Files 文件夹中,因此您可以将配置文件称为 .\config_file.txt 如果它与程序位于同一目录,或者 ..\ other_program\config_file.txt 如果它位于与其他程序不同的目录中。这不仅适用于 Windows,而且适用于几乎所有现代操作系统,并且如果您正确设置了“开始于”框,或者直接从其文件夹运行它,它将正常工作。

            【讨论】:

            • 使用变量是正确的方法。仅仅因为可执行文件位于目录中不会导致该目录成为当前工作目录。在使用相对目录之前,可执行文件必须做一些事情。
            【解决方案9】:

            我认为那些建议使用 C:\PROGRA~1 名称的人之所以遭到反对,是因为这些名称被视为最好被遗忘的 Windows 的遗留功能,这也可能是不稳定的,至少在不同的安装之间是不稳定的,尽管可能不在同一台机器上。

            此外,正如有人在对另一个答案的评论中指出的那样,可以将 Windows 配置为在文件系统中根本没有 8.3 旧名称。

            【讨论】:

              【解决方案10】:

              您可以在本地 D 或本地 C 创建一个文件夹 ProgramFiles 来安装那些可以安装到具有空格/字符的文件夹名称的应用程序。

              【讨论】:

              • 老实说,这是一个非常糟糕和愚蠢的答案。为一个文件/应用程序创建一个新目录?如果他无法控制文件的位置怎么办?
              【解决方案11】:

              作为其他答案的替代方案,您可以尝试符号链接

              先创建符号链接,根据链接安装应用。 (根据具体情况,这可能更容易做到,例如,当应用程序在其代码中多次提及目标文件夹时)

              符号链接将创建类似于文件夹快捷方式的东西,但被其他应用程序视为实际文件夹。

              这就是你的做法:

              • 以管理员身份运行cmd
              • 使用此命令:mklink /D "C:\LinkToProgramFiles" "C:\Program Files"

              然后,您开始在无法处理空格的应用程序中使用“C:\LinkToProgramFiles”。 (此链接在 Windows 资源管理器中可以视为带有快捷方式符号的文件夹)


              如果您开始玩太多,请非常小心不要创建循环链接。

              【讨论】:

              • 应该没有必要去链接,符号或其他。这不太可能解决根本问题。
              • 它确实解决了我在安装 python、scipy 和 theano 时遇到的问题。事实上,这绝对是最简单、最安全的选择(不是唯一的选择)。由于该问题没有说明该程序,因此它确实是一个合适的答案。
              • 很高兴您有解决问题的方法。我希望omg 没有尝试使用编写不佳的程序,该程序不处理路径名中的空格和其他特殊字符。很抱歉你这样做了,但我从来没有遇到过 Python 问题。
              【解决方案12】:

              使用以下符号:

              • 对于“C:\Program Files”,使用“C:\PROGRA~1
              • 对于“C:\Program Files (x86)”,使用“C:\PROGRA~2

              感谢@lit 在下面的评论中为您提供理想的答案:

              使用环境变量%ProgramFiles%%ProgramFiles(x86)%

              【讨论】:

              • 避免这样做,因为没有保证它们将分别缩写为 ~1 和 ~2。如果有人将 Windows 安装到已经有一个名为“C:\Programmers”的文件夹的系统上,那么它将占用短名称“C:\PROGRA~1”,因此“C:\Program Files”将为“C:\PROGRA~2”等
              • 是的,也许可以,但它在大多数情况下都有效。我认为理想的答案是上面突出显示的答案,由 lit 回答。无论如何,感谢您的投入。
              • 感谢您的解决方案。
              【解决方案13】:

              切勿对该位置进行硬编码。使用环境变量%ProgramFiles%%ProgramFiles(x86)%

              在指定这些时,请始终引用,因为 Microsoft 可能在其中添加了空格或其他特殊字符。

              "%ProgramFiles%\theapp\app.exe"
              "%ProgramFiles(x86)%\theapp\app.exe"
              

              此外,目录可能用您不知道的语言表示。 http://www.samlogic.net/articles/program-files-folder-different-languages.htm

              >set|findstr /i /r ".*program.*="
              CommonProgramFiles=C:\Program Files\Common Files
              CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
              CommonProgramW6432=C:\Program Files\Common Files
              ProgramData=C:\ProgramData
              ProgramFiles=C:\Program Files
              ProgramFiles(x86)=C:\Program Files (x86)
              ProgramW6432=C:\Program Files
              

              使用这些命令在机器上查找值。不要将它们硬编码到程序或 .bat 或 .cmd 文件脚本中。使用变量。

              set | findstr /R "^Program"
              set | findstr /R "^Common"
              

              【讨论】:

                【解决方案14】:

                对于无法处理文件路径中空格的程序,可以使用以下方法指定不带空格的 C:\Program Files:

                'Path to Continuum Reports Subdirectory - Note use DOS equivalent (no spaces)
                RepPath = "c:\progra~1\continuum_reports\" or
                RepPath = C:\Program Files\Continuum_Reports  'si es para 64 bits.
                
                ' Path to Continuum Reports Subdirectory - Note use DOS equivalent (no spaces)
                RepPath = "c:\progra~2\continuum_reports\" 'or
                RepPath = C:\Program Files (x86)\Continuum_Reports  'si es para 32 bits.
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-05-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多