Come dividere il nome file da un percorso completo in script batch?Come dividere il nome file da un percorso completo in batch?
risposta
@echo off
Set filename=C:\Documents and Settings\All Users\Desktop\Dostips.cmd
For %%A in ("%filename%") do (
Set Folder=%%~dpA
Set Name=%%~nxA
)
echo.Folder is: %Folder%
echo.Name is: %Name%
Ma non posso prendere credito per questo; Google ha trovato questo a http://www.dostips.com/forum/viewtopic.php?f=3&t=409
Grazie ! Questo ha funzionato anche per me. Sto leggendo un elenco di cartelle da un file e formattandole. Ho usato questo: "per/F" token = 1 delim = "%% A in (list_of_files.txt) do (" –
Potrebbe essere bello mostrare come ottenere solo il nome del file. (Senza l'estensione.) – Vaccano
% ~ nI - espande% I in un nome file <- preso direttamente dall'output DOS per "help". –
Non so molto sui file batch, ma non potrei avere un file batch pre-copiato dalla directory home al percorso che hai che restituirebbe un elenco dei nomi dei file, quindi usalo nome?
Ecco un collegamento che ritengo possa essere utile per creare il file batch preimpostato.
@echo off
Set filename="C:\Documents and Settings\All Users\Desktop\Dostips.cmd"
call :expand %filename%
:expand
set filename=%~nx1
echo The name of the file is %filename%
set folder=%~dp1
echo It's path is %folder%
Continuando dall'esempio di Pete sopra, per farlo direttamente nella finestra cmd, utilizzare un unico %
, ad esempio:
cd c:\test\folder A
for %X in (*)do echo %~nxX
(Si noti che i file speciali come desktop.ini non verranno visualizzati)
E 'anche possibile reindirizzare l'output in un file utilizzando >>
:.
cd c:\test\folder A
for %X in (*)do echo %~nxX>>c:\test\output.txt
Per un vero e proprio esempio, supponendo che si desidera robocopy tutti file dalla cartella-A alla cartella-B (non in modo ricorsivo):
cd c:\test\folder A for %X in (*)do robocopy . "c:\test\folder B" "%~nxX" /dcopy:dat /copyall /v>>c:\test\output.txt
e per tutte le cartelle (ricorsivamente):
cd c:\test\folder A for /d %X in (*)do robocopy "%X" "C:\test\folder B\%X" /e /copyall /dcopy:dat /v>>c:\test\output2.txt
Durante l'utilizzo ho scoperto che se si utilizzano queste tecniche con robocopy è necessario anche ricordare di rimuovere l'ultima barra rovesciata nella directory di origine. Sarebbe utile se ci fosse un esempio che utilizza '% ~ dpX' come sorgente. – Annan
analizzare un nome di file dal nome percorso completo (ad esempio C: \ temp \ my.bat) a qualsiasi componente (ad esempio, file.ext).
singola linea di codice:
For %%A in ("C:\Folder1\Folder2\File.ext") do (echo %%~fA)
È possibile modificare out "C: \ Cartella1 \ Cartella2 \ file.ext" per qualsiasi percorso completo e il cambiamento "%% ~ fA" per una qualsiasi delle altre opzioni che troverai eseguendo "per /?" al prompt dei comandi.
Elaborato Codice
set "filename=C:\Folder1\Folder2\File.ext"
For %%A in ("%filename%") do (
echo full path: %%~fA
echo directory: %%~dA
echo path: %%~pA
echo file name only: %%~nA
echo extension only: %%~xA
echo expanded path with short names: %%~sA
echo attributes: %%~aA
echo date and time: %%~tA
echo size: %%~zA
echo drive + path: %%~dpA
echo name.ext: %%~nxA
echo full path + short name: %%~fsA)
batch di script locale
Salva come C: \ cmd \ ParseFn.cmd.
Aggiungi C: \ cmd al variabile PATH ambiente e usarlo per memorizzare tutti voi script batch riutilizzabili.
@echo off
@echo ::___________________________________________________________________::
@echo :: ::
@echo :: ParseFn ::
@echo :: ::
@echo :: Chris Advena ::
@echo ::___________________________________________________________________::
@echo.
::
:: Process arguements
::
if "%~1%"=="/?" goto help
if "%~1%"=="" goto help
if "%~2%"=="/?" goto help
if "%~2%"=="" (
echo !!! Error: ParseFn requires two inputs. !!!
goto help)
set in=%~1%
set out=%~2%
:: echo "%in:~3,1%" "%in:~0,1%"
if "%in:~3,1%"=="" (
if "%in:~0,1%"=="/" (
set in=%~2%
set out=%~1%)
)
::
:: Parse filename
::
set "ret="
For %%A in ("%in%") do (
if "%out%"=="/f" (set ret=%%~fA)
if "%out%"=="/d" (set ret=%%~dA)
if "%out%"=="/p" (set ret=%%~pA)
if "%out%"=="/n" (set ret=%%~nA)
if "%out%"=="/x" (set ret=%%~xA)
if "%out%"=="/s" (set ret=%%~sA)
if "%out%"=="/a" (set ret=%%~aA)
if "%out%"=="/t" (set ret=%%~tA)
if "%out%"=="/z" (set ret=%%~zA)
if "%out%"=="/dp" (set ret=%%~dpA)
if "%out%"=="/nx" (set ret=%%~nxA)
if "%out%"=="/fs" (set ret=%%~fsA)
)
echo ParseFn result: %ret%
echo.
goto end
:help
@echo off
:: @echo ::___________________________________________________________________::
:: @echo :: ::
:: @echo :: ParseFn Help ::
:: @echo :: ::
:: @echo :: Chris Advena ::
:: @echo ::___________________________________________________________________::
@echo.
@echo ParseFn parses a fully qualified path name (e.g., c:\temp\my.bat)
@echo into the requested component, such as drive, path, filename,
@echo extenstion, etc.
@echo.
@echo Syntax: /switch filename
@echo where,
@echo filename is a fully qualified path name including drive,
@echo folder(s), file name, and extension
@echo.
@echo Select only one switch:
@echo /f - fully qualified path name
@echo /d - drive letter only
@echo /p - path only
@echo /n - file name only
@echo /x - extension only
@echo /s - expanded path contains short names only
@echo /a - attributes of file
@echo /t - date/time of file
@echo /z - size of file
@echo /dp - drive + path
@echo /nx - file name + extension
@echo /fs - full path + short name
@echo.
:end
:: @echo ::___________________________________________________________________::
:: @echo :: ::
:: @echo :: ParseFn finished ::
:: @echo ::___________________________________________________________________::
:: @echo.
- 1. Come scrivere un percorso completo in un file batch con un nome di cartella con spazio?
- 2. Ottieni percorso completo senza nome file dal percorso che include il nome file
- 3. Ottieni il nome file senza estensione dal percorso completo
- 4. Ottieni il nome file e l'estensione da un percorso assoluto
- 5. Utilizzare sed per prelevare il nome file dal percorso completo?
- 6. Come ottenere il percorso completo per un file in VBScript?
- 7. Come posso ottenere un nome file da un percorso completo con PHP?
- 8. Come ottenere il percorso completo del file da un file input
- 9. Aprire il file con il suo percorso completo in C++
- 10. Come eseguire il looping dei file (percorso completo) in PowerShell
- 11. Come eseguire un file batch da java?
- 12. Parse nome della directory da un percorso file completo in C#
- 13. file batch: ottenere il percorso assoluto
- 14. Come espandere un collegamento simbolico al percorso completo di un nome file in vim?
- 15. ottenere il nome completo di un assembly
- 16. Come si ottiene il percorso completo per un argomento della riga di comando del nome file?
- 17. Come ottenere il nome/percorso del file Excel in VBA
- 18. Estrarre il nome del file da un percorso
- 19. PyCharm ha un percorso file completo?
- 20. Lua Richiede la funzione su un nome percorso completo
- 21. git aggiungi il nome file completo automatico
- 22. Get percorso completo del file in java
- 23. Come posso separare un percorso completo in directory e nome file?
- 24. Come eseguire il comando 'msbuild' da un file batch
- 25. Ottenere il nome del file in batch per ciclo
- 26. Come ottenere il percorso completo di StreamWriter
- 27. Come si ottiene il nome file corrente di un documento di Word, senza estensione o percorso completo, utilizzando una macro?
- 28. Come visualizzare il risultato di grep con percorso completo o nome file
- 29. Come posso espandere il percorso completo del file corrente per passare a un comando in Vim?
- 30. Ottieni il percorso completo dell'applicazione in Node.js
possibile duplicato [percorso lotto estratto e nome file dalla variabile] (http://stackoverflow.com/questions/15567809/batch-extract-path-and-filename-from-a-variable) – Gab