【发布时间】:2010-10-27 21:53:58
【问题描述】:
一个配置文件需要另一个文件的位置,
但该文件位于“C:\Program Files”中,
其中有空格的路径无法识别,
还有没有其他方法可以指定没有空格的位置?
【问题讨论】:
标签: windows
一个配置文件需要另一个文件的位置,
但该文件位于“C:\Program Files”中,
其中有空格的路径无法识别,
还有没有其他方法可以指定没有空格的位置?
【问题讨论】:
标签: windows
你应该可以使用
试试 c:\> dir /x(在 dos shell 中)
这会显示短名称 为非 8dot3 文件名生成。 格式是 /N 与 在长之前插入的短名称 姓名。如果没有短名称, 空白显示在它的位置。
【讨论】:
没有。
有时您可以引用文件名。
"C:\Program Files\Something"
有些程序会容忍引号。由于您没有提供任何特定程序,因此无法判断报价是否适合您。
【讨论】:
尝试用引号括住路径。即“C:\Program Files\Appname\config.file”
【讨论】:
使用生成的短名称 (C:\Progra~1) 或用引号将路径括起来。
【讨论】:
你可以尝试使用:
C:\PROGRA~1
【讨论】:
应该有办法直接使用完整的c:\program files 路径。通常,它涉及将字符串封装在引号中。例如,在 windows 命令行上;
c:\program files\Internet Explorer\iexplore.exe
不会启动 Internet Explorer,但
"c:\program files\Internet Explorer\iexplore.exe"
会的。
【讨论】:
我认为其他帖子已经回答了这个问题,但只是一些有趣的信息供您参考(来自命令提示符):
目录 c:\ /ad /x
这将提供仅目录的列表,并提供它们的“短名称”。
【讨论】:
Windows shell(假设您使用 CMD.exe)使用 %ProgramFiles% 指向 Program Files 文件夹,无论它在哪里。由于默认的 Windows 文件打开器会考虑这样的环境变量,如果程序写得好,它应该支持这一点。
另外,使用相对地址可能是值得的。如果您正在使用的程序安装正确,它应该已经在 Program Files 文件夹中,因此您可以将配置文件称为 .\config_file.txt 如果它与程序位于同一目录,或者 ..\ other_program\config_file.txt 如果它位于与其他程序不同的目录中。这不仅适用于 Windows,而且适用于几乎所有现代操作系统,并且如果您正确设置了“开始于”框,或者直接从其文件夹运行它,它将正常工作。
【讨论】:
我认为那些建议使用 C:\PROGRA~1 名称的人之所以遭到反对,是因为这些名称被视为最好被遗忘的 Windows 的遗留功能,这也可能是不稳定的,至少在不同的安装之间是不稳定的,尽管可能不在同一台机器上。
此外,正如有人在对另一个答案的评论中指出的那样,可以将 Windows 配置为在文件系统中根本没有 8.3 旧名称。
【讨论】:
您可以在本地 D 或本地 C 创建一个文件夹 ProgramFiles 来安装那些可以安装到具有空格/字符的文件夹名称的应用程序。
【讨论】:
作为其他答案的替代方案,您可以尝试符号链接。
先创建符号链接,根据链接安装应用。 (根据具体情况,这可能更容易做到,例如,当应用程序在其代码中多次提及目标文件夹时)
符号链接将创建类似于文件夹快捷方式的东西,但被其他应用程序视为实际文件夹。
这就是你的做法:
cmd mklink /D "C:\LinkToProgramFiles" "C:\Program Files"
然后,您开始在无法处理空格的应用程序中使用“C:\LinkToProgramFiles”。 (此链接在 Windows 资源管理器中可以视为带有快捷方式符号的文件夹)
如果您开始玩太多,请非常小心不要创建循环链接。
【讨论】:
omg 没有尝试使用编写不佳的程序,该程序不处理路径名中的空格和其他特殊字符。很抱歉你这样做了,但我从来没有遇到过 Python 问题。
使用以下符号:
感谢@lit 在下面的评论中为您提供理想的答案:
使用环境变量%ProgramFiles%和%ProgramFiles(x86)%
:
【讨论】:
切勿对该位置进行硬编码。使用环境变量%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"
【讨论】:
对于无法处理文件路径中空格的程序,可以使用以下方法指定不带空格的 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.
【讨论】: