web-dev-qa-db-ja.com

ループのバッチでファイル名を取得

バッチファイルに次のForループがあります。

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination
ECHO %%i
exit
)

ECHOの結果は、ファイルパス全体を出力します。例:C:\ Foldername\Filename私はFilenameのみをECHOアウトする必要があります。ファイル名?ありがとう!

39
Murtaza Mandvi

コマンド拡張機能が有効な場合(Windows XP以降、大体))、構文%〜nF(Fは変数、〜nはその名前の要求)を使用して、ファイル名。

FOR /R C:\Directory %F in (*.*) do echo %~nF

ファイル名のみをエコーする必要があります。

75
AKX

または、%〜Fだけで完全なパスと完全なファイル名が表示されます。

たとえば、現在のディレクトリにすべての* .axファイルを登録する場合...

FOR /R C:. %F in (*.ax) do regsvr32 "%~F"

これはWin7(64ビット)で非常にうまく機能します:-)

4
Chris

私は少し遅れていますが、これを使用しました:

dir /B *.* > dir_file.txt

次に、単純なFORループを作成してファイル名を抽出し、使用できます。例えば:

for /f "tokens=* delims= " %%a in (dir_file.txt) do (
gawk -f awk_script_file.awk %%a
)

または、後で使用するためにそれらをVars(!N1!、!N2!..!Nn!)に保存します。例えば:

set /a N=0
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1
set v[!N!]=%%a
)
3
Guy Soffer

ファイル名(のみ)と拡張子の両方を残したい場合は、%~nxF

FOR/R C:\ Directory%F in(*。*)do echo%〜nxF
0
Gophern Kwok