web-dev-qa-db-ja.com

DOSコマンドで現在のフォルダ名を取得しますか?

DOSコマンドを使って現在のフォルダ名(現在のディレクトリパスではない)を取得することは可能ですか?もしそうなら、どうですか?

私が得た最も近いのはこれでしたが、それはしません:

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

注:上記の試みは、私が文字列をトークン化して最後のトークンセットをCURR変数として取得しようとしていたことです。

54
djangofan

私が見つけた最短の方法:

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はファイル名と拡張子のみを意味します

76
Tamara Wijsman

バッチファイルの現在の場所を知りたい場合(そしてあなたの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と呼ばれると仮定します。あなたはそれをさまざまな方法で呼ぶことができます:

  1. ..\..\to\mytest.bat .........................(相対パス)
  2. d:\path\to\mytest.bat .......................(フルパス)
  3. \\fileserver\sharename\mytest.bat ...(リモート共有のパス)

...そして、あなたはいつもあなたの変数で正しい値を得るでしょう。

30
Kurt Pfeifle

個人的には、Domsの名前にドットが表示されないようになるまでは、Tomsの回答が好きでした。 これ は私にヒントを与えてくれました:

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
15
Marc Wittke

トムの答えはいいのですが、ピリオドを含むディレクトリ名がある場合(つまり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
5

他の方法は:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%  

それは "。"で動作します。パス名の中のスペースとスペース

それは何をするためのものか?

  1. ファイル名全体(ドライブレターパスファイル名拡張子)をMyPath Varに入れます

  2. MyPath varからファイル名と拡張子を削除する

UNCパスでも機能します。パスの最後にバックスラッシュが必要な場合2番目のsetコマンドのMyPathの後の\を削除します。

set "MyPath=%%MyPath:%~nx0=%%"
4
lenz

現在のディレクトリを変数に入れることができます。ワンライナー:

set a=%cd%

確認する

echo %a%
4
vera

単純な

for %%d in ("%CD%") do echo %%~nxd

または

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

パスの終わりのバックスラッシュに注意してください。終わりのバックスラッシュである必要はありません。

2
kygg

このスレッド での私の答えは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
1
djangofan

これは私にとってはバッチファイルからうまくいきます。現在の作業ディレクトリ名を返します。

pushd %1 & for %%i in (.) do @echo %%~ni
1
nem50