2009-08-26 10 views
10

J'écris un script de construction, et si le répertoire dans lequel l'utilisateur construit le script contient des espaces, tout s'écroule. Pour contourner cela, j'ai pensé à utiliser les noms de fichiers 8.3 de sorte que drive:\Documents and setttings\whatever devient drive:\Docume~1\whatever. Le répertoire courant peut être trouvé en interrogeant la variable d'environnement% CD%. Comment transformer% CD% en un chemin de fichier court?Comment transformer le répertoire de travail en un nom de fichier court 8.3 en utilisant batch?

Répondre

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

Edit: ne pas oublier d'utiliser %% si vous l'utilisez dans le fichier batch. comme celui-ci

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

Sur ma machine:

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

Autres options:

En outre, la substitution de variables des références a été améliorée. Vous pouvez maintenant utiliser la syntaxe optionnelle suivante:

%~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 
+1

cherchait cela moi-même - vous seriez surpris de savoir comment googler pour 'for' et commande rapide est. Échapper le% s à %% si dans un fichier batch. – Will

+1

Je reçois ceci comme message d'erreur: cd ~ sf était inattendu pour le moment. – Geo

+0

Bravo sera. Je n'oublie pas de faire ça. –

-3

Mieux: utilisez des guillemets (") autour de tous vos chemins.

+0

C'est difficile à expliquer, mais ce n'est pas une option. – Geo

+1

Ne répond pas à la question de l'OP, n'explique pas pourquoi cela est mieux dans les situations où cela fonctionne, et ne fonctionne pas toujours. –

Questions connexes