找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 45959|回复: 20

[文本处理] 有没有把带空格长文件名路径转换为win可识别短路径的工具?

[复制链接]
发表于 2024-6-18 15:01:17 | 显示全部楼层 |阅读模式
本帖最后由 ednykissyou 于 2024-6-18 15:08 编辑

比如我想把这种C:\Program Files\Adobe\Adobe InDesign 2024\Resources\CEP\CEPHtmlEngine
转换为短路径

我这个file://C:\Progra~1\Adobe\Adobe~2\Resources\CEP\CEPHtmlEngine
为何不对呢,Adobe这个目录下就有三个长文件夹:
Adobe Creative Cloud Experience
Adobe InDesign 2024
Adobe Media Encoder CS6
发表于 2024-6-18 15:20:41 | 显示全部楼层
回复 1# ednykissyou
  1. @echo off
  2. cd /d "C:\Program Files\Adobe\Adobe InDesign 2024\Resources\CEP\CEPHtmlEngine"
  3. echo 当前路径 %cd%
  4. cd /d "C:"
  5. echo 当前路径 %cd%
  6. cd /d "C:\PROGRA~1\Adobe\ADOBEI~1\RESOUR~1\CEP\CEPHTM~1"
  7. echo 当前路径 %cd%
  8. pause
复制代码
发表于 2024-6-18 17:35:40 | 显示全部楼层
C:\Progra~1\Adobe\AdobeI~1\Resour~1\CEP\CEPHtm~1

短路径是截取前六个字符,有空格占用的要忽略,如Adobe InDesign 2024表示为AdobeI~1
 楼主| 发表于 2024-6-18 18:21:37 | 显示全部楼层
谢谢二位前辈。
我又长进了一点。
 楼主| 发表于 2024-6-21 18:14:06 | 显示全部楼层
回复 2# ShowCode

没看懂你这个咋用,批处放在当前路径能获取到短路径?
 楼主| 发表于 2024-6-21 18:15:31 | 显示全部楼层
回复 3# ppll2030

C:\Users\dub\AppData\Roaming\Adobe\InDesign\Version 19.0-J

上边这个我写成这样又为何不对了
file://C:\Users\dub\AppData\Roaming\Adobe\InDesign\Versio~1
发表于 2024-6-21 21:09:48 | 显示全部楼层
  1. file:///D:/Program Files (x86)/Tencent/WeChat Files/wxid_93hw03hhoq4a22/index.htm
复制代码
我在 IE浏览器 QQ浏览器 google浏览器 的地址栏输入这个地址均能打开指定的网页
你到底是什么环境需要短名称
发表于 2024-6-21 21:12:26 | 显示全部楼层
实在不行你可以逐个查看
比如
  1. @echo off
  2. cd /d c:\
  3. dir /x
复制代码
可以看到各长文件名对应的短文件名
发表于 2024-6-21 23:21:59 | 显示全部楼层
回复 6# ednykissyou


    file://C:\Users\dub\AppData\Roaming\Adobe\InDesign\Versio~1.0-J

有问题,可以用cmd下,用dir /x来检查一下系统的正确短路径
发表于 2024-6-22 09:03:59 | 显示全部楼层
回复 6# ednykissyou


    VERSIO~1.0-J
发表于 2024-6-22 12:46:57 | 显示全部楼层
获取文件或文件夹的短路径
  1. @echo off
  2. set strPath='C:\Users\dub\AppData\Roaming\Adobe\InDesign\Version 19.0-J'
  3. powershell -c "$path=%strPath%;$a=New-Object -ComObject Scripting.FileSystemObject;if(Test-Path $path){if($a.FileExists($path)){$f=$a.GetFile($path)}else{$f=$a.GetFolder($path)};Write-Host $f.ShortPath}else{Write-Host '路径不存在'}"
  4. pause
复制代码
  1. '&cls&cscript -nologo -e:vbscript "%~f0" "C:\Users\dub\AppData\Roaming\Adobe\InDesign\Version 19.0-J"&pause&exit
  2. strPath = WScript.Arguments(0)
  3. Set objFSO = CreateObject("Scripting.FileSystemObject")
  4. If objFSO.FileExists(strPath) Then
  5.     Set f = objFSO.GetFile(strPath)
  6.     WScript.Echo f.ShortPath
  7. ElseIf objFSO.FolderExists(strPath) Then
  8.     Set f = objFSO.GetFolder(strPath)
  9.     WScript.Echo f.ShortPath
  10. Else
  11.     WScript.Echo strPath & " 路径不存在"
  12. End If
复制代码
发表于 2024-6-23 08:45:18 | 显示全部楼层
for /?  里面:
%~sI        - 扩展的路径只含有短名
发表于 2024-6-23 09:39:12 | 显示全部楼层
回复 5# ednykissyou


放在当前路径.bat
  1. @echo off
  2. for %%i in ("%~dp0") do (
  3.     set "ShortName=%%~si"
  4. )
  5. echo,%ShortName%
  6. pause
复制代码
发表于 2024-6-23 10:27:31 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-6-23 10:28 编辑


系统内置命令 fsutil 可用于管控 dos8.3 命名操作,见如下命令行的当前系统状态查询
其中状态值2,3似乎等效,即只允许系统盘(如c:)8.3命名有效,改变状态值0/1的结果须重建文件目录结构之后方可生效...详细用法可网搜自查
老东家自报8.3命名管理已是dos远古遗产存在诸多纰漏且若与windows_x32/x64位系统命名管理并存会折损文件系统效率...仅在不得已时用之

C:\temp>fsutil 8dot3name

---- 支持的 8DOT3NAME 命令 ----
query   在系统上查询当前设置的短名称行为
scan    扫描受影响的注册表条目
set     更改控制系统上短名称行为的设置
strip   删除目录中所有文件的短名称

C:\temp>fsutil 8dot3name query
注册表状态为: 2 (按卷设置 - 默认值)。

C:\temp>fsutil 8dot3name query
注册表状态为: 1 (禁用所有卷上的 8dot3 名称创建)。

C:\temp>fsutil 8dot3name query
注册表状态为: 0 (启用所有卷上的 8dot3 名称创建)。

C:\temp>fsutil 8dot3name query
注册表状态为: 3 (在所有非系统卷上禁用 8dot3 名称创建)。
 楼主| 发表于 2024-6-28 21:07:25 | 显示全部楼层
回复 11# buyiyang

编译器错误,无效字符
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 22:03 , Processed in 0.052427 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表