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
または、Get value in variableを持つ.bat内。
for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%
説明: http://www.robvanderwoude.com/ntfor.php
nxはファイル名と拡張子のみを意味します
バッチファイルの現在の場所を知りたい場合(そしてあなたのWindowsが非常に古いリリースではない場合)、 'DOS box'ウィンドウに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 ...]
これは多くの場合に有効です。バッチファイルがmytest.bat
と呼ばれると仮定します。あなたはそれをさまざまな方法で呼ぶことができます:
..\..\to\mytest.bat
.........................(相対パス)d:\path\to\mytest.bat
.......................(フルパス)\\fileserver\sharename\mytest.bat
...(リモート共有のパス)...そして、あなたはいつもあなたの変数で正しい値を得るでしょう。
個人的には、Domsの名前にドットが表示されないようになるまでは、Tomsの回答が好きでした。 これ は私にヒントを与えてくれました:
for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
トムの答えはいいのですが、ピリオドを含むディレクトリ名がある場合(つまり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
他の方法は:
set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%"
echo MyPath=%MyPath%
それは "。"で動作します。パス名の中のスペースとスペース
それは何をするためのものか?
ファイル名全体(ドライブレターパスファイル名拡張子)をMyPath
Varに入れます
MyPath
varからファイル名と拡張子を削除する
UNCパスでも機能します。パスの最後にバックスラッシュが必要な場合2番目のsetコマンドのMyPath
の後の\
を削除します。
set "MyPath=%%MyPath:%~nx0=%%"
現在のディレクトリを変数に入れることができます。ワンライナー:
set a=%cd%
確認する
echo %a%
単純な
for %%d in ("%CD%") do echo %%~nxd
または
set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"
パスの終わりのバックスラッシュに注意してください。終わりのバックスラッシュである必要はありません。
このスレッド での私の答えは3つの簡単な行でそれをします:
@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul
これは私にとってはバッチファイルからうまくいきます。現在の作業ディレクトリ名を返します。
pushd %1 & for %%i in (.) do @echo %%~ni