Impostare una variabile di percorso con spazi nel percorso in un file .cmd di Windows o in un file batch

Sono nuovo nella scrittura di sceneggiature 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.

Voglio estrarre un sacco 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 syntax 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 un modo diverso?

Prova qualcosa del genere:

SET MY_PATH=C:\Folder with a space "%MY_PATH%\MyProgram.exe" /switch1 /switch2 

Io uso

 set "VAR_NAME=" 

durante l’aggiornamento del percorso:

 set "PATH=%UTIL_DIR%;%PATH%" 

Ci sono due opzioni qui. Innanzitutto, è ansible memorizzare il percorso non quotato e solo citarlo in un secondo momento:

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

Un’altra opzione che puoi usare è una subroutine che allude alle stringhe non quotate (ma in questo caso non è davvero una buona idea dato che stai aggiungendo virgolette, eliminandole e re-aggiungendole di nuovo senza alcun beneficio):

 set MyPath="C:\Program Files\Foo" call :foo %MyPath% goto :eof :foo "%~1\foo.exe" goto :eof 

Il %~1 rimuove le virgolette attorno all’argomento. Questo è utile quando si passano i nomi delle cartelle tra virgolette ma, come detto prima, in questo caso particolare non è la migliore idea 🙂

Prova questo;

  1. crea una variabile come sotto

     SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"** 
  2. Quindi sostituire il percorso con variabile. Assicurati di aggiungere preventivi per inizia e termina

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

Metto sempre il percorso tra virgolette quando creo un file .bat. (Ho appena aggiunto il PAUSE in modo che non chiuda lo schermo.)

Per esempio:

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

Il modo corretto per farlo è così:

 @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 

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

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

Spero che questo aiuti.

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

  1. Esegui il prompt dei comandi come amministratore (fai clic con il pulsante destro del mouse su cmd.exe e seleziona Esegui come amministratore)

  2. Nel setx path "%path%;your new path" cmd setx path "%path%;your new path" quindi inserisci

  3. Verificare se il percorso è stato eseguito correttamente digitando il percorso e premendo Invio