Suppongo che si intenda veramente un file batch di Windows, non DOS.
variabili d'ambiente Batch sono limitati a 8191 caratteri, quindi probabilmente non sarà in grado di adattarsi a tutti i percorsi dei file in un'unica variabile, a seconda del numero di file e la durata media percorso del file.
I nomi dei file devono essere citati nel caso in cui contengano spazi.
Supponendo si inseriscono in una variabile, è possibile utilizzare:
@echo off
setlocal disableDelayedExpansion
set "files="
for /r %%F in (*) do call set files=%%files%% "%%F"
dichiarazione la chiamata è piuttosto lento. È più veloce utilizzare l'espansione ritardata, ma l'espansione di %%F
danneggerà qualsiasi valore contenente !
se l'espansione ritardata è abilitata. Con un po 'più di lavoro, puoi avere una versione di espansione ritardata veloce e sicura.
@echo off
setlocal disableDelayedExpansion
set "files=."
for /r %%F in (*) do (
setlocal enableDelayedExpansion
for /f "delims=" %%A in ("!files!") do (
endlocal
set "files=%%A "%%F"
)
)
(set files=%files:~2%)
Se i nomi dei file non rientrano in una variabile, allora si dovrebbe ricorrere a una matrice pseudo di valori, uno per ogni file. Nello script seguente, utilizzo FINDSTR per il prefisso di ogni riga di DIR ouptut con un prefisso del numero di riga. Io uso il numero di riga come indice per l'array.
@echo off
setlocal disableDelayedExpansion
:: Load the file path "array"
for /f "tokens=1* delims=:" %%A in ('dir /s /b^|findstr /n "^"') do (
set "file.%%A=%%B"
set "file.count=%%A"
)
:: Access the values
setlocal enableDelayedExpansion
for /l %%N in (1 1 %file.count%) do echo !file.%%N!
Utilizzare 'FOR' per inserirli in una variabile. per/f% a in ('dir/s/b') do (echo% a) dalla riga di comando o raddoppia il %% se in un file batch. –
Possibile duplicato di [File batch - Scrive l'elenco dei file nella variabile] (https://stackoverflow.com/questions/3238433/batch-file-write-list-of-files-to-variable) –