Zakładam, że naprawdę masz na myśli plik wsadowy systemu Windows, a nie DOS.
Zmienne środowiska wsadowego są ograniczone do 8191 znaków, więc prawdopodobnie nie będzie możliwe dopasowanie wszystkich ścieżek plików do jednej zmiennej, w zależności od liczby plików i średniej długości ścieżki pliku.
Nazwy plików należy cytować, jeśli zawierają spacje.
Zakładając, że pasuje do jednej zmiennej, można użyć:
@echo off
setlocal disableDelayedExpansion
set "files="
for /r %%F in (*) do call set files=%%files%% "%%F"
oświadczenie podczas rozmowy jest dość powolne. Szybciej jest używać opóźnionego rozszerzenia, ale rozszerzenie %%F
spowoduje uszkodzenie dowolnej wartości zawierającej !
, jeśli włączone jest opóźnione rozwijanie. Przy odrobinie więcej pracy możesz mieć szybką i bezpieczną wersję opóźnionego rozszerzenia.
@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%)
Jeśli nazwy plików nie pasuje do jednej zmiennej, to należy odwołać się do tablicy pseudo wartości, po jednym pliku. W poniższym skrypcie używam FINDSTR do prefiksowania każdej linii DIR ouptut z prefiksem numeru linii. Używam numeru wiersza jako indeksu do tablicy.
@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!
Użyj "FOR", aby umieścić je w zmiennej. for/f% a in ("dir/s/b") do (echo% a) z linii poleceń lub podwojone %%, jeśli w pliku wsadowym. –
Możliwy duplikat [Plik wsadowy - Zapisz listę plików do zmiennej] (https://stackoverflow.com/questions/3238433/batch-file-write-list-of-files-to-variable) –