私は Windows スクリプトの初心者で、次のような絶対パスがあり/bin/debug/test/abc.xyz.dll
、ファイル名を削除して、出力のようなパスのみを取得したいと考えています/bin/debug/test/
。
どうすればいいでしょうか?
答え1
FOR
ループしない場合でも、ループ の拡張機能を使用することができます。
@echo off
setlocal EnableExtensions
set "arg=%~1"
for /f %%A in ('echo %arg%') do echo %%~pA
このスクリプトは完全なファイル名で呼び出され、ファイル名内のスペースを保護するために引用符で囲まれる場合もあります。
編集:
元のコードでecho %%~nxA
は明らかに間違っていました。申し訳ありません。ファイル名をパスから分離し、ファイル名を返します。上記のコードは、パスのみを返します (ドライブ文字なし)。
編集2: @Karanがこれを次のように省略できることを指摘してくれたことに感謝します。
@echo off
setlocal EnableExtensions
echo %~p1
拡張変数展開構文はFOR
ループだけでなく、引数の拡張も同様です (CALL /? を参照)。