ディレクトリ内のすべてのファイル名を取得し、コマンドラインから変数に格納する必要があります。ディレクトリ内のファイル名のリストを取得し、cmdコマンドを使用して変数に格納する方法
私はこの
`dir /s /b > print.txt`
に出くわしたが、これはtxtファイルにファイル名を出力します。
これらの名前はどのように変数に格納できますか?
ディレクトリ内のすべてのファイル名を取得し、コマンドラインから変数に格納する必要があります。ディレクトリ内のファイル名のリストを取得し、cmdコマンドを使用して変数に格納する方法
私はこの
`dir /s /b > print.txt`
に出くわしたが、これはtxtファイルにファイル名を出力します。
これらの名前はどのように変数に格納できますか?
私はあなたが本当に、Windowsのバッチファイルではなく、DOSを意味すると仮定しています。
バッチ環境変数は8191文字に制限されているため、ファイル数と平均ファイルパス長に応じて、すべてのファイルパスを1つの変数に収めることはできません。
ファイル名にスペースが含まれている場合は、引用符で囲む必要があります。
@echo off
setlocal disableDelayedExpansion
set "files="
for /r %%F in (*) do call set files=%%files%% "%%F"
CALL文はかなり遅いです:彼らはあなたが使用することができ、一つの変数に収まると仮定すると、
。遅延拡張を使用する方が速いですが、遅延拡張が有効な場合は、%%F
を展開すると!
を含む値が破損します。もう少し作業すれば、迅速で安全な遅延拡張バージョンを手に入れることができます。
@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%)
ファイル名が1つの変数に収まらない場合は、ファイルごとに1つの値の擬似配列を使用する必要があります。以下のスクリプトでは、FINDSTRを使用してDIR ouptutの各行に接頭辞を付けます。私は行番号を配列のインデックスとして使用します。
@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!
編集 - うわー!誰も2年間見つけなかった第2の解決策(安全版)の大きなバグを修正しました!私が '!file! 'の代りに' %% A'を代入するまで、安全面は壊れていました。 – dbenham
setlocal enableDelayedExpansion
set /a counter=0
for /f %%l in ('dir /b /s') do (
set /a counter=counter+1
set line_!counter!=%%l
)
set line_
あなたはこの1つの変数のチェックですべてを保存したい場合:@Mattは、バッチファイルを使用して、言ったように Explain how dos-batch newline variable hack works
。
setlocal enabledelayedexpansion
set params=
for /f "delims=" %%a in ('dir /s/b') do set params=!params! %%a
拡張が遅延する'! 'を含むファイル名。 – dbenham
「FOR」を使用して変数に入れます。コマンドラインから/ f%a( 'dir/s/b')do(echo%a)を実行するか、バッチファイル内の%%を二倍にします。 –
[バッチファイル - ファイルのリストを変数に書き込む]の可能な複製(https://stackoverflow.com/questions/3238433/batch-file-write-list-of-files-to-variable) –