web-dev-qa-db-ja.com

コマンドラインからディレクトリの最後の部分を取得するにはどうすればよいですか

ディレクトリの最後の部分を変数に保存するにはどうすればよいですか?

たとえば、次のパスがあります:A\B\C\DDfile_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%
7
jscott

これを試してみてください:

for %f in (A\B\C\D) do set var=%~nxf