DOSコマンドで現在のフォルダ名を取得する?
DOSコマンドでカレントフォルダ名(カレントディレクトリパスではなく)を取得することは可能でしょうか?可能であれば、どのようにして取得するのでしょうか?
for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%
注意: 上記の試みは、私が文字列をトークン化して最後のトークンを CURR 変数として取得しようとしたものです。
DOSコマンドでカレントフォルダ名(カレントディレクトリパスではなく)を取得することは可能でしょうか?可能であれば、どのようにして取得するのでしょうか?
for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%
注意: 上記の試みは、私が文字列をトークン化して最後のトークンを CURR 変数として取得しようとしたものです。
for %I in (.) do echo %~nxI
または.batスクリプト内での最短の方法を見つけました。
for %%I in (.) do echo %%~nxI
または.batスクリプト内で変数に値を取得する。
for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%
説明。 http://www.robvanderwoude.com/ntfor.php
nxはファイル名と拡張子のみを意味します。
バッチファイルの現在の場所を知りたい場合は、(お使いのWindowsがそれほど古いリリースでない場合は)「DOSボックス」ウィンドウでfor /?
と入力してください。下にスクロールします。読み込んでください。
%0 - as the name how this batchfile was called
%~d0 - as the drive letter where this batchfile is located ('\' in case of share)
%~p0 - as path (without the drive letter) where this batchfile is located
%~n0 - as filename (without suffix) of this batchfile
%~x0 - as filename's suffix (without filename) of this batchfile
%~a0 - as this batchfile's file attributes
%~t0 - as this batchfile's date+time
%~z0 - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]
0x1&
これは多くの場合に有効です。バッチファイルが mytest.bat
と呼ばれているとします。これを様々な方法で呼び出すことができます。
..\..\to\mytest.bat
…………………………. (相対パス) d:\path\to\mytest.bat
……………………… (フルパス) \fileserver\sharename\mytest.bat
… (リモート共有上のパス) …と、変数の中で常に正しい値を得ることができます。
個人的にはTomsの答えが好きだったのですが、dir名のドットに苦戦するまでは。
for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
```0x1&というヒントがありました。
Tomさんの回答は良いのですが、ディレクトリ名にピリオドが入っている場合(例えばwxwidgets-2.9.4)はフルネームしか出力されません。そのため、.4が拡張子として扱われているので、これはwxwidgets-2.9と出力されてしまいます(そう、ディレクトリ名なのに!)。
フル出力名を取得するには、最後に拡張子を追加する必要があります。
FOR %I IN (.) DO Echo %~nI%~xI
バッチファイルモードの場合。
FOR %%I IN (.) DO Echo %%~nI%%~xI
もちろん、バッチファイルに変数を設定しても構いません。
FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
``` 0x1&
set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%"
echo MyPath=%MyPath%
これはパス名
の". “とスペースで動作します。
ファイル名全体(driveletter-path-filename-extension)をMyPath
Var
ファイル名と拡張子をMyPath
var
ファイル名と拡張子を`
set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%"
echo MyPath=%MyPath%
これはパス名
の”. “とスペースで動作します。
ファイル名全体(driveletter-path-filename-extension)をMyPath
Var
ファイル名と拡張子をMyPath
var
ファイル名と拡張子を var
から削除します。パスの末尾にバックスラッシュが必要な場合は 2番目のセットコマンドでMyPath
の後の0x6&を削除します、例:
set "MyPath=%%MyPath:%~nx0=%%"