Vorrei ottenere la directory principale di un file all'interno di un file .bat
. Quindi, data una variabile impostata su "C:\MyDir\MyFile.txt"
, mi piacerebbe ottenere "C:\MyDir"
. In altre parole, l'equivalente della funzionalità dirname()
in un tipico ambiente UNIX. È possibile?Come ottengo l'equivalente di dirname() in un file batch?
risposta
for %%F in (%filename%) do set dirname=%%~dpF
Questo imposterà %dirname%
per l'unità e la directory del nome del file memorizzato in %filename%
.
Attenzione con nomi di file contenenti spazi, però. O devono essere impostati con le virgolette che circondano:
set filename="C:\MyDir\MyFile with space.txt"
o si deve mettere le virgolette attorno al argomento nella for
ciclo:
for %%F in ("%filename%") do set dirname=%%~dpF
Entrambi i metodi funzionerà, sia allo stesso tempo ha vinto 't :-)
Penso che tu intenda, "metti le * virgolette * attorno all'argomento nel ciclo for:" – aphoria
Sì, grazie. Attualmente non riesco a pensare correttamente :) – Joey
@mosh, qual è il risultato atteso per un hardlink? Si noti inoltre che i workaround sono sensibili ai nomi di file Unicode e al carattere della console. – Joey
Se per qualsiasi motivo non è possibile utilizzare per la (senza le estensioni ai comandi ecc) potrebbe essere in grado di farla franca con il .. \ mod:
set file=c:\dir\file.txt
set dir=%file%\..\
Il problema con il ciclo for è che lascia il trailing \ alla fine della stringa. Ciò causa problemi se si desidera ottenere il dirname più volte. Forse è necessario ottenere il nome della directory che è il nonno della directory contenente il file anziché solo la directory genitore. Semplicemente usando la tecnica for loop una seconda volta si rimuoverà \, e non si otterrà la directory dei nonni.
Questo non si può semplicemente fare quanto segue.
set filename=c:\1\2\3\t.txt
for %%F in ("%filename%") do set dirname=%%~dpF
for %%F in ("%dirname%") do set dirname=%%~dpF
questo imposterà nomedir a "c: \ 1 \ 2 \ 3", non "c: \ 1 \ 2".
La seguente funzione risolve il problema rimuovendo anche il trailing \.
:dirname file varName
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET _dir=%~dp1
SET _dir=%_dir:~0,-1%
endlocal & set %2=%_dir%
GOTO :EOF
Si chiama come segue.
set filename=c:\1\2\3\t.txt
call :dirname "%filename%" _dirname
call :dirname "%_dirname%" _dirname
Buona soluzione per il problema finale. Altrimenti non si può usare direttamente il comando ""% dirname% "' dato che la citazione finale sarebbe stata sfuggita dalla barra precedente. In tal caso il '"% dirname% \ "' funziona. Ma solo uno di loro alla volta. – Vertigo
- 1. Includere un file batch in un file batch
- 2. Come si ottiene la dirname di un file con Perl?
- 3. OS X bash: dirname
- 4. Come fare un file batch eseguire un file reg
- 5. Come sovrascrivere un file di testo da un file batch
- 6. subroutine in file batch
- 7. php come andare ad un livello superiore a dirname (__ FILE__)
- 8. Come ottenere l'ultima parte di dirname in Bash
- 9. Come ottengo la directory di un file usando l'oggetto File?
- 10. Eseguire un file batch in una nuova finestra dal batch?
- 11. come ottenere la data di ieri in un file batch
- 12. Come annullare git rm -rf dirname senza un primo commit?
- 13. Come ottenere un timestamp di file batch UNIVERSAL Windows
- 14. Come usare psake da un file batch?
- 15. Come eseguire un file batch da java?
- 16. Errore in un file batch chiamato
- 17. Menu in file batch
- 18. Controllo di ritorno da un file batch
- 19. Cosa significa% * in un file batch
- 20. File batch: maschera file
- 21. Come eseguire un file batch in modalità 64 bit da un file batch in modalità 32 bit
- 22. ritarda un file batch in meno di un secondo?
- 23. l'esecuzione di un file batch da C#
- 24. Come sovrascrivere i file esistenti in batch?
- 25. dirname() in C: il manuale è sbagliato?
- 26. Come leggere l'input dalla console in un file batch?
- 27. Come mostrare i progressi in un file batch usando sqlcmd?
- 28. Come avviare un'applicazione senza attendere in un file batch?
- 29. sì/no file batch
- 30. Come ottengo una versione precedente di un file con libgit2sharp
Ho aggiunto un commento sui nomi di file con spazi; ho dimenticato di testare con quelli. – Joey