2010-11-30 8 views
1

から最後のフォルダを取得するI(例えば...)DOSのバッチファイルで、次の値があります。DOSのバッチ:相対パス

..\Apple\Jones 
..\Banana\Smith 
..\Pear\Wilson 

私は姓の値(「ジョーンズ」を抽出する必要があり、 "スミス"、 "ウィルソン")を各値から計算する。どのようなテクニックを使って、これらの部分文字列の値を得ることができますか?このトピックによると

+0

[Windowsのコマンドは** not ** DOSです](https://superuser.com/q/451432/241386)。 DOSには '%〜n0'のような能力はありません –

答えて

2
+0

私は従いません。それは私にバッチファイルの名前を示していますか?質問は何を求めているのですか? – lance

+2

私の悪い説明に申し訳ありません。 %0にはスクリプトへのパスが含まれています。 %〜n0では、スクリプト名のみを抽出します。より明示的な例があります:/ D %% i for( ".. \ Apple \ Jones"、 ".. \ Banana \ Smith"、 ".. \ Pear \ Wilson")に対してdo echo %%〜ni – Nicolas

+1

Delightful 。ありがとうございました。注:最後のフォルダ(実際のデータ)はピリオドを含む名前のディレクトリなので、echo %%〜ni %%〜xiを使用しました。 – lance

0

を使用することをお勧め私はすでにそのための機能を書きました。パスを指定すると、ファイル名またはパス名だけが返されます。

コピーしますバッチスクリプトの最後にこの機能...のURL、Windowsのパス、Linuxのパスなど:任意のパスのための作品集(下記手順)

rem =========================================================================== 

:Name_From_Path 
SetLocal 

set _TMP_FOLDERNAME=%1 
for %%g in ("%_TMP_FOLDERNAME%") do set _TMP_FOLDERNAME=%%~nxg 

EndLocal & set _Name_From_Path=%_TMP_FOLDERNAME% 
goto :EOF 

rem =========================================================================== 

使用法:

CALL :Name_Of_Path ..\Apple\Jones 
ECHO %_Name_From_Path% 

結果:ジョーンズ