如何找到一个Windows目录/文件的短路径?
我需要为我正在使用的应用程序使用缩短路径名。例如,我需要C:\PROGRA~1
我需要为我正在使用的应用程序使用缩短路径名。例如,我需要,而不是
C:\Program Files。该程序不能处理空格,也不接受引号路径(例如
“C:\Program Files”`)。
如果有帮助,我使用的是Windows 7。如果需要的话,我可以访问XP之后的任何版本。
我需要为我正在使用的应用程序使用缩短路径名。例如,我需要C:\PROGRA~1
我需要为我正在使用的应用程序使用缩短路径名。例如,我需要,而不是
C:\Program Files。该程序不能处理空格,也不接受引号路径(例如
“C:\Program Files”`)。
如果有帮助,我使用的是Windows 7。如果需要的话,我可以访问XP之后的任何版本。
在一些方便的目录下创建一个bat文件,然后你可以从这个目录下复制+粘贴短路径。
你可以直接运行command.com
,然后继续执行cd
命令到你的当前目录。
@ECHO OFF
echo %~s1
使用%~s1
和命名的变量*
Windows命令提示符在处理带空格的变量时有一些惯例,这些惯例是很难学习和理解的,特别是当你有Unix背景的时候。 You 可以 做
C:\> shortNamePath "c:\Program Files (x86)\Android\android-sdk"
c:\PROGRA~2\Android\ANDROI~1
(用no**引号),或者
@ECHO OFF
if '%1'=='' (%0 .) else echo %~s1
(注意引号的位置不直观);然后
C:\Program Files (x86)\Android\android-sdk> shortNamePath
C:\PROGRA~2\Android\ANDROI~1
cmd /c for %A in ("C:\Program Files") do @echo %~sA
``` -
**分解**:
- `cmd /c` - 启动一个新的Windows命令解释器实例,执行由字符串指定的命令,然后终止
- `for %%parameter in (set) do`命令 - 有条件地执行一个命令多次。
- `echo` - 在屏幕上显示消息。
- `@`符号与`ECHO OFF`相同,仅适用于当前行。
- `%~s` - 扩展的路径仅包含短名。
“简称 "其实就是老的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
我找到了一个非常方便的方法,如果你安装了Powershell,可以解决当前目录的路径名短的问题。
只需在当前目录下打开powershell
在cmd windows中键入powershell
如果你在gui中打开了文件夹,可以直接在文件夹地址栏中键入cmd.exe或powershell.exe。[[[https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]])
与Ivan Schwartz的答案类似,可以将 “C:\Program Files "替换为%cd%
,得到当前的dir:
cmd /c for %A in ("%cd%") do @echo %~sA
另外,你也可以使用这个名为PathCopyCopy
的小工具,只需点击几下,你就可以从上下文菜单中获得任何文件夹的长路径和短路径,例如:
右键点击目标文件夹 =>路径复制 =>短路径。它将被复制到你的剪贴板上。 preview
@echo off
for %%i in (%*) do echo %%~si
pause
保存为shortpath.bat ,然后拖动文件。其结果:
C:\PROGRA~1
C:\PROGRA~2
C:\PROGRA~3
C:\Python27
C:\Users
C:\Windows
Press any key to continue . . .
&001
调用shortpath <file path>
也可以。
C:\Users\abcd>subst z: "c:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"
C:\Users\abcd>subst
Z:\: => C:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"
这是我在处理带空格的文件时用过的最简单的方法,而且从文件资源管理器中也可以访问,具有相同的访问权限。
对于windows 10用户来说*******这些解决方案在我的windows 10笔记本电脑上都不适用,因为注册表中的一个键禁止创建快捷键。: - Alt+r, 键入regedit打开注册表编辑器 - 转到HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\Control\FileSystem - 查找NtfsDisable8dot3NameCreation键。如果值是0x00000001(1),那么你的系统不会为你的文件夹/文件创建任何shortname - 在这种情况下,双击NtfsDisable8dot3NameCreation键,在数据字段中输入0 *这不是追溯性的*:) 我的意思是你需要重新创建你需要从你的旧应用程序中访问的文件夹/文件…… 也许有什么巧妙的方法是可行的,但我还不知道。
看来他们引入这个键是为了加快文件系统的操作。
我通过运行npm install
在锅炉板上安装了node模块。在试图删除这些文件夹时,windows不允许我们删除它们,因为路径太长,无法处理。
经过一些浅层次的研究,我认为应该用我自己的代码片段将文件夹从根目录重命名为叶子目录,这样它也会抛出任何违规的异常。以下是C#项目的代码。
public static int directoryCounterIndex = 0;
public static void Main(string[] args)
{
string dirPath = @"D:\Studies\MeanStack\a\nodem";
RenameDirectories(dirPath);
}
private static void RenameDirectories(string dirPath)
{
directoryCounterIndex += 1;
var newPath = Path.GetDirectoryName(dirPath) + Path.DirectorySeparatorChar + directoryCounterIndex.ToString();
Directory.Move(dirPath, newPath);
var subDirectories = Directory.GetDirectories(newPath);
foreach (var subDirectory in subDirectories)
{
RenameDirectories(subDirectory);
}
}
只要把空格换成
%20
就可以了,这就是 “翻译 "的方式,空格会进入%20。