Convert long filename to short filename (8.3) using cmd.exe

前端 未结 3 1642
忘了有多久
忘了有多久 2020-12-02 20:36

I am trying to convert a long filename to a short filename (8.3) on Windows.

A batch-file with a command line argument works as intended:

short.bat:

相关标签:
3条回答
  • 2020-12-02 21:01

    Replace the filename.txt to the filename you want to convert to 8.3

    dir /x filename.txt
    

    You will then have to split the result with whitespace as your delimiter (\s in regex). Then the value with the ~ is your short filename. If your filename is short to begin with, then you won't find a string containing a ~.

    0 讨论(0)
  • 2020-12-02 21:04
    cmd /c for %A in ("C:\Documents and Settings\User\NTUSER.DAT") do @echo %~sA
    
    0 讨论(0)
  • 2020-12-02 21:19

    Here is an example that read in the registry the location of your "appdata\local" folder and convert it to short path:

    cls
    @echo off
    cd /d "%~dp0"
    chcp 65001 >nul
    
    for /f "skip=1" %%a in ('"wmic useraccount where name='%USERNAME%' get sid"') do (
        for %%b in (%%a) do set current_SID=%%b
    )
    set current_username=%USERNAME%
    set current_userprofile=%USERPROFILE%
    
    set key_to_read=HKEY_USERS\%current_SID%\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    set value_to_read=Local AppData
    rem If value_to_read contains ? space(s) set tokens to 2+?
    for /f "usebackq eol= tokens=3,* delims= " %%a in (`reg query "%key_to_read%" /v "%value_to_read%" 2^>nul ^| find "%value_to_read%"`) do (
        set value_type=%%a
        set data_read=%%b
    )
    set data_read=%data_read:USERPROFILE=current_userprofile%
    call set "data_read=%data_read%"
    set current_local_appdata=%data_read%
    
    set current_local_appdata_temp=%current_local_appdata%\Temp
    echo %current_local_appdata_temp%
    
    for %%a in ("%current_local_appdata_temp%") do set "current_local_appdata_temp_short=%%~sa"
    echo %current_local_appdata_temp_short%
    
    pause
    exit
    
    0 讨论(0)
提交回复
热议问题