[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

回复 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
复制代码
测试代码之前请做好备份

TOP

C:\Progra~1\Adobe\AdobeI~1\Resour~1\CEP\CEPHtm~1

短路径是截取前六个字符,有空格占用的要忽略,如Adobe InDesign 2024表示为AdobeI~1

TOP

谢谢二位前辈。
我又长进了一点。

TOP

回复 2# ShowCode

没看懂你这个咋用,批处放在当前路径能获取到短路径?

TOP

回复 3# ppll2030

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

上边这个我写成这样又为何不对了
file://C:\Users\dub\AppData\Roaming\Adobe\InDesign\Versio~1

TOP

  1. file:///D:/Program Files (x86)/Tencent/WeChat Files/wxid_93hw03hhoq4a22/index.htm
复制代码
我在 IE浏览器 QQ浏览器 google浏览器 的地址栏输入这个地址均能打开指定的网页
你到底是什么环境需要短名称

QQ 20147578

TOP

实在不行你可以逐个查看
比如
  1. @echo off
  2. cd /d c:\
  3. dir /x
复制代码
可以看到各长文件名对应的短文件名

QQ 20147578

TOP

回复 6# ednykissyou


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

有问题,可以用cmd下,用dir /x来检查一下系统的正确短路径

TOP

回复 6# ednykissyou


    VERSIO~1.0-J
测试代码之前请做好备份

TOP

获取文件或文件夹的短路径
  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
复制代码

TOP

for /?  里面:
%~sI        - 扩展的路径只含有短名

TOP

回复 5# ednykissyou


放在当前路径.bat
  1. @echo off
  2. for %%i in ("%~dp0") do (
  3.     set "ShortName=%%~si"
  4. )
  5. echo,%ShortName%
  6. pause
复制代码
测试代码之前请做好备份

TOP

本帖最后由 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 名称创建)。

TOP

回复 11# buyiyang

编译器错误,无效字符

TOP

返回列表