Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I transform the working directory into a 8.3 short file name using batch? [duplicate]

I'm writing a build script, and if the directory the user's building the script contains spaces, everything falls apart. To go around that, I thought of using 8.3 filenames so that drive:\Documents and setttings\whatever becomes drive:\Docume~1\whatever . The current directory can be found by querying the environment variable %CD%.

How do I transform %CD% into a short file path?

like image 306
Geo Avatar asked Aug 26 '09 09:08

Geo


People also ask

How do I get the 8.3 filename?

The 8.3 filename can be obtained using the Kernel32. dll function GetShortPathName. Although there is no compulsory algorithm for creating the 8.3 name from an LFN, Windows uses the following convention: If the LFN is 8.3 uppercase, no LFN will be stored on disk at all.

Can you edit a batch file while it running?

You will be fine as long as you modify the batch file after the current executing line position byte offset at the end of the most recently parsed line of code. If you modify it before then it will start doing strange things (repeating commands etc..).


1 Answers

for %f in ("%cd%") do @echo %~sf

Edit: don't forget to use %% if you are using it in batch file. like this

for %%f in ("%cd%") do @echo %%~sf

On my machine:

C:\Users\preet>cd "\Program Files"
C:\Program Files>for %f in ("%cd%") do @echo %~sf
C:\PROGRA~1

Other options:

In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

The modifiers can be combined to get compound results:

    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    %~dp$PATH:I - searches the directories listed in the PATH
                   environment variable for %I and expands to the
                   drive letter and path of the first one found.
    %~ftzaI     - expands %I to a DIR like output line
like image 190
Preet Sangha Avatar answered Oct 11 '22 15:10

Preet Sangha