2009-12-05 18 views
76

Sono nuovo nella scrittura di script e non riesco a far funzionare questo. Potrei se trasferissi i file su un percorso senza uno spazio, ma mi piacerebbe che funzionasse con lo spazio se potesse.Imposta una variabile di percorso con spazi nel percorso in un file .cmd di Windows o in un file batch

Desidero estrarre un gruppo di aggiornamenti di Office in una cartella con un file .cmd. Per rendere il file batch utilizzabile su qualsiasi computer, imposto una variabile di percorso che devo solo modificare in un punto per eseguirlo su un altro computer. Il problema è che il percorso ha uno spazio in esso. Se metto le virgolette sul percorso nella definizione, cmd.exe le mette attorno al percorso prima di accodare il nome file e gli interruttori e il batch fallisce con "Errore di sintassi della riga di comando". Senza virgolette, fallisce con "non è riconosciuto come comando interno o esterno, programma eseguibile o file batch".

Per il test, sto usando l'interruttore di aiuto fino a quando o se posso farlo funzionare. Posso farlo usando un nome file/cartella 8.3 (ad esempio My Documents as MyDocu ~ 1), ma può essere fatto in modo diverso?

+0

Le virgolette devono contenere il percorso con il nome del file e i parametri della riga di comando devono seguire. Puoi fornire ulteriori dettagli su come viene creata la riga di comando? Esattamente cosa intendi per> Se inserisco virgolette attorno al percorso nella definizione, cmd.exe li mette in giro per il percorso prima di accodare il nome file e gli interruttori – vladhorby

risposta

79

provare qualcosa di simile:

SET MY_PATH=C:\Folder with a space 

"%MY_PATH%\MyProgram.exe" /switch1 /switch2 
+0

Ecco cosa ho fatto usando Sostituisci in Blocco note. Grazie. – marcerickson

+3

Felice di averlo aiutato. Sarebbe bello se tu ascolassi e accettassi qualsiasi risposta ti sentissi di aiutare. – aphoria

+0

Perché questo non funziona per me? Devo usare MY_PATH in un'istruzione if se non esiste "% dest_fold% \ %% a \" mkdir "% dest_fold%" \ %% a \, ma non funziona –

25

ci sono due opzioni qui. In primo luogo, è possibile memorizzare il percorso non quotate e basta citare un secondo momento:

set MyPath=C:\Program Files\Foo 
"%MyPath%\foo with spaces.exe" something 

Un'altra opzione è possibile utilizzare è una subroutine che alles per le stringhe non-citazione (ma in questo caso in realtà non è una buona idea dal momento che salvando le citazioni, li strappando via e ri-aggiungendo di nuovo senza il beneficio):

set MyPath="C:\Program Files\Foo" 
call :foo %MyPath% 
goto :eof 

:foo 
"%~1\foo.exe" 
goto :eof 

il %~1 rimuove le virgolette attorno alla discussione. Questo è utile quando si passano i nomi delle cartelle tra virgolette ma, come detto prima, in questo caso particolare non è la migliore idea :-)

+0

Ho usato il primo metodo, utilizzando Sostituisci nel blocco note. Il secondo sembrava inutilmente complicato. Grazie. – marcerickson

+1

Ho un file batch che ottiene parametri. Usare 'set LALA =% ~ 1' era ciò che funzionava per me. – JCH2k

+0

Il metodo 2 ha funzionato per me in un ciclo complicato per. – Noumenon

0

Se è necessario memorizzare il percorso permanente (il percorso non viene modificato quando viene riavviato cmd)

  1. Eseguire il prompt dei comandi come amministratore (fare clic destro su cmd.exe e selezionare Esegui come amministratore)

  2. In cmd setx path "%path%;your new path" quindi immettere

  3. Controllare se il percorso viene presa correttamente digitando il percorso e premendo Invio

+1

Penso che la domanda non riguardi * la variabile PATH *, ma piuttosto * una variabile * path. A quanto pare, l'OP vuole memorizzare un particolare percorso in una variabile e utilizzare il valore attraverso lo script batch. –

6

ho sempre posto il percorso tra virgolette quando io sono la creazione di un file .bat. (Ho appena aggiunto il PAUSE in modo che non chiuda lo schermo.)

Ad esempio:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe" 
PAUSE 
5

Il modo corretto per farlo è in questo modo:

@ECHO off 
SET MY_PATH=M:\Dir\^ 
With Spaces\Sub Folder^ 
\Dir\Folder 
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat 
CALL "%MY_PATH%\hello.bat" 
pause 
30

Io uso

set "VAR_NAME=<String With Spaces>" 

quando si aggiorna il percorso:

set "PATH=%UTIL_DIR%;%PATH%" 
+0

grazie, finalmente una risposta che funziona –

9

Prova questo;

  1. creare una variabile come sotto

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"** 
    
  2. Quindi sostituire il percorso con variabile. Assicurarsi di aggiungere le citazioni per le partenze e alla fine

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll" 
    
1

Il modo più semplice per risolvere questo problema è quello di mettere il nome della cartella tra virgolette:

(cd\New Folder\...) --> (cd\"New Folder"\...)

spera che questo aiuta.

Problemi correlati