ディレクトリの最後の部分を変数に保存するにはどうすればよいですか?
たとえば、次のパスがあります:A\B\C\D
、D
をfile_name=D
のような変数に格納したい。
Windowsタグがあるため、cmd.exe
には拡張機能が組み込まれていると思います。その場合は、FOR
の2つの特別な置換変数参照を使用できます。
変数%A
が与えられ、パスとファイルが含まれています。
%~nA
はファイル名を出力し、%~xA
はファイル拡張子を出力します。次の例では、パイプ文字|
を区切り文字として使用しています。パイプはファイルおよびパスに対して無効な文字であり、パスにnotが含まれる必要があります。これにより、パスとファイル名にスペースを含めることができます。詳細については、FOR /?
をご覧ください。
C:\> SET FSPATH=C:\WINDOWS\Temp\file.txt
C:\> echo %FSPATH%
C:\WINDOWS\Temp\file.txt
C:\> FOR /F "delims=|" %A IN ("%FSPATH%") do echo %~nxA
file.txt
または、cmd.exe
に拡張子がない場合は、delims=\
を使用して、ディレクトリの区切り文字を数え、その数に基づいてパス/ファイル文字列を分割できます。
編集:エラーに関するコメントごと。上記は例ですコマンドライン。同じwithinバッチスクリプトを実行する場合は、変数の%
を2倍にする必要があります。
FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA
FOR
ループの外側で値を使用するには、値を別の変数に割り当てる必要があります。変数%%A
は、FOR
のスコープに制限されています。
:: example.bat
SET FSPATH=C:\Windows\bfsvc.exe
FOR /F "delims=|" %%A IN ("%FSPATH%") DO (
echo Inside loop %%~nxA
SET SOMEFILE=%%~nxA
)
ECHO Outside loop %SOMEFILE%
これを試してみてください:
for %f in (A\B\C\D) do set var=%~nxf