如何找到 Windows 目录/文件的短路径?

如何找到 Windows 目录/文件的短路径?

我需要为正在使用的应用程序使用缩短的路径名。例如,我需要C:\PROGRA~1\而不是C:\Program Files。该程序无法处理空格,并且不接受带引号的路径(例如"C:\Program Files")。

如果有帮助的话,我正在使用 Windows 7。如果需要,我可以访问 XP 以来的任何版本。

答案1

cmd开始,然后在运行框中输入。启动 cmd,然后使用cd以进入您感兴趣的文件夹:

cd \

然后

dir /x

C:\>dir /x

13/10/2011  09:14 AM    <DIR>          DOCUME~1     Documents and Settings
13/10/2011  09:05 AM    <DIR>          PROGRA~1     Program Files

答案2

在一些方便的目录中创建一个 bat 文件,然后您可以从该路径复制+粘贴短路径。

您也可以运行并继续对当前目录command.com执行命令。cd

在 Windows 批处理脚本中,%~s1将路径参数扩展为短名称. 创建此批处理文件:

@ECHO OFF
echo %~s1

我打电话给我shortNamePath.cmd,并这样称呼它:

C:\> shortNamePath "c:\Program Files (x86)\Android\android-sdk"
c:\PROGRA~2\Android\ANDROI~1

如果没有提供参数,则使用当前目录的版本:

@ECHO OFF
if '%1'=='' (%0 .) else echo %~s1

不带参数调用:

C:\Program Files (x86)\Android\android-sdk> shortNamePath
C:\PROGRA~2\Android\ANDROI~1

使用SET命名变量

Windows 命令提示符有一些处理变量值中带空格的约定,这些约定有点难以学习和理解,特别是如果你有 Unix 背景的话。你可以这样做

SET TESTPATH=c:\Program Files (x86)\Android\android-sdk

(和引号), 或者

SET "TESTPATH=c:\Program Files (x86)\Android\android-sdk"

(请注意引号的非直观位置);然后

CALL :testargs "%TESTPATH%"

:testargs
echo %~s1
goto :eof

答案3

以下是一句话

cmd /c for %A in ("C:\Program Files") do @echo %~sA

分解

  • cmd /c - 启动 Windows 命令解释器的新实例,执行字符串指定的命令,然后终止
  • for %%parameter in (set) do命令——有条件地执行命令几次。
  • echo- 在屏幕上显示消息。符号与仅适用于当前行的符号@相同。ECHO OFF
  • %~s- 扩展路径仅包含短名称。

来源

答案4

“短名称”实际上是旧的 DOS 8.3 命名约定,因此所有目录都将是前 6 个字母,然后~1假设只有一个名称匹配,例如:

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\BCDEFG~1    - C:\BCDEFGHIJKL M Another Directory

这是唯一的例外

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well

相关内容