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

som*_*ume 97 windows-7

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

如果有帮助,我使用的是 Windows 7。如有必要,我可以访问自 XP 以来的任何版本。

Pau*_*aul 94

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

cd \
Run Code Online (Sandbox Code Playgroud)

然后

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
Run Code Online (Sandbox Code Playgroud)

  • @Paul 这在 Win10 中似乎不起作用。有任何想法吗? (5认同)
  • @AHungerArtist 短文件名不一定存在;他们的创作可以被关闭。 (4认同)
  • 我的意思是你如何显示整个 8.3 路径? (2认同)

小智 52

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

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

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

@ECHO OFF
echo %~s1
Run Code Online (Sandbox Code Playgroud)

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

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

如果没有提供参数,这是一个使用当前目录的版本:

@ECHO OFF
if '%1'=='' (%0 .) else echo %~s1
Run Code Online (Sandbox Code Playgroud)

不带参数调用:

C:\Program Files (x86)\Android\android-sdk> shortNamePath
C:\PROGRA~2\Android\ANDROI~1
Run Code Online (Sandbox Code Playgroud)

使用SET和命名变量

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

SET TESTPATH=c:\Program Files (x86)\Android\android-sdk
Run Code Online (Sandbox Code Playgroud)

没有引号),或

SET "TESTPATH=c:\Program Files (x86)\Android\android-sdk"
Run Code Online (Sandbox Code Playgroud)

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

CALL :testargs "%TESTPATH%"
        ?

:testargs
echo %~s1
goto :eof
Run Code Online (Sandbox Code Playgroud)

  • 真的很有用,应该标记为答案! (10认同)
  • 我使用您的代码(添加了“pause”)在“shell:sendto”文件夹中创建了一个“ShortName.bat”文件,然后我可以通过右键单击文件然后“SendTo-&gt;ShortName”来访问它。谢谢! (3认同)

小智 22

这是一个单班轮

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

细分

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

来源

  • 做得很好; 正如@Scott 指出的,从`cmd` 运行时不需要`cmd /c`;您确实需要来自 _PowerShell_ 的它,但是您还需要在 `/c` 之后将标记括起来`'...'`:`cmd /c 'for %f in ("C:\Program Files") do @回声%~sf'` (4认同)
  • 好的!!!您可以将“C:\Program Files”替换为 . 获取当前目录的短名称 (3认同)
  • 什么时候/为什么需要`cmd /c`?如果您在命令提示符窗口中,则只需键入 ``for %A in ("C:\Program Files") do @echo %~sA`` 命令,然后将其键入“运行”对话框中,结果在您可以读取之前就消失了。 (2认同)

小智 10

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

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\BCDEFG~1    - C:\BCDEFGHIJKL M Another Directory
Run Code Online (Sandbox Code Playgroud)

这是唯一的例外

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well
Run Code Online (Sandbox Code Playgroud)

  • 不对。有时使用较少的字符,特别是当您使用亚洲字符时,例如韩语。 (7认同)
  • 我有很多文件以相同的字符开头,在其中四个(`...~4`)之后,它以看起来像散列的方式开始,例如`ABxxxx~1`,其中 x 是十六进制——这不是很易于阅读。 (2认同)
  • 您是否建议用户通过查看长名称可以从逻辑上找出短名称?这不是真的。如果我创建 `ABCDEFGH-CAT`,它会得到短名称 `ABCDEF~1`。如果我然后创建`ABCDEFGH-DOG`,它会得到短名称`ABCDEF~2`。如果我然后删除`ABCDEFGH-CAT`,`ABCDEFGH-DOG`,仍然有短名称`ABCDEF~2`。仅通过查看长名称无法判断。 (2认同)

小智 10

如果您安装了 Powershell,我发现解决当前目录(或其他任何东西)的短路径名的方法非常方便。

只需在当前目录中打开powershell

  • 在 cmd windows 中输入 powershell

  • 如果您在 gui 中打开了文件夹,则可以直接在文件夹的地址栏中键入 cmd.exe 或 powershell.exe。

然后下命令

(New-Object -ComObject Scripting.FileSystemObject).GetFolder(".").ShortPath
Run Code Online (Sandbox Code Playgroud)

信息来源:[ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


小智 5

与 Ivan Schwartz 的回答类似,您可以将 "C:\Program Files" 替换%cd%为获取当前目录:

cmd /c for %A in ("%cd%") do @echo %~sA  
Run Code Online (Sandbox Code Playgroud)