2009-08-26 4 views
10

Sto scrivendo uno script di compilazione, e se la directory in cui l'utente costruisce lo script contiene spazi, tutto cade a pezzi. Per aggirare ciò, ho pensato di utilizzare nomi di file 8.3 in modo che drive:\Documents and setttings\whatever diventi drive:\Docume~1\whatever. La directory corrente può essere trovata interrogando la variabile d'ambiente% CD%.Come si trasforma la directory di lavoro in un nome di file breve da 8,3 utilizzando batch?

Come trasformare% CD% in un percorso di file breve?

risposta

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

Edit: non dimenticate di utilizzare %% se lo si utilizza in file batch. come questo

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

Sulla mia macchina:

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

Altre opzioni:

Inoltre, la sostituzione di variabili per i riferimenti è stato migliorato. È ora possibile utilizzare la seguente sintassi opzionale:

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

lo stavo cercando da solo - sarete sorpresi di quanto sia difficile cercare su google e il prompt dei comandi. Sfuggi da% s a %% se in un batchfile. – Will

+1

Viene visualizzato come messaggio di errore: cd ~ sf era inatteso in questo momento. – Geo

+0

saluti. Continuo a dimenticare di farlo. –

-3

Migliore: utilizzare i caratteri di quota (") attorno a tutti i percorsi.

+0

è difficile da spiegare, ma questa non è un'opzione. – Geo

+1

Non risponde alla domanda dell'OP, non spiega perché questo è migliore nelle situazioni in cui funziona, e non sempre funziona. –