1

実行しているバッチファイルのフォルダ名を見つける必要があります。他のすべてのアプローチは私にフルパスを提供します。親フォルダ名だけが必要です。また、他の言及されたアプローチはループを使用します。これは私のニーズに対して非常に長くて冗長です。%パラメータ(またはそれらの組み合わせ)から直接親フォルダ名を見つける方法はありますか?

4

3 に答える 3

2

あなたの質問に対する直接の答えは「いいえ」です。FORループまたはCALLを使用せずに、拡張修飾子のみを使用する直接的な方法はありません。

あなたの質問で参照されているスレッドには、必要なものがほとんどすべて含まれています。

これは、すでに投稿されているものと非常によく似た2つの最適化された手法です。Method1が最速である必要があります。

編集-部分文字列操作を削除してさらに最適化しました。
Edit2 - FOR/Fの代わりに単純なFORを使用しました

@echo off
setlocal

::method 1 using FOR
for %%F in ("%~p0\.") do set "method1=%%~nxF"
if not defined method1 set method1=\

::method 2 using CALL
call :getName "%~p0\." method2

::print results
set method
exit /b

:getName  PathWithTrailing\.  ReturnVar
set "%~2=%~nx1"
if not defined %~2 set %~2=\
exit /b
于 2012-06-07T12:56:56.030 に答える
1

試す

echo %~dp0 

batファイルで。%0はバッチファイルの名前です。〜dpは、指定された引数のドライブとパスを提供します。

于 2012-06-07T12:28:20.297 に答える
1

それを行う簡単な方法は本当にありません。長いループアプローチは必要ないとおっしゃっていたので、短いループアプローチを次に示します。

for %%D in (.) do @echo %%~nD

このコードはバッチファイル内でのみ機能することに注意してください。それ以外では、%%の代わりに%を使用する必要があります。

Rob vanderWoudeのスクリプトページを確認する必要があります。彼のサイトには、DOSスクリプトに関する多くの優れた情報があります。

于 2012-06-07T12:43:35.897 に答える