DOS 명령으로 현재 폴더 이름을 가져 오시겠습니까? 현재 폴더

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가 매우 오래된 버전이 아닌 경우) for /?‘DOS 상자’창에 입력하십시오. 아래로 스크롤. 읽다.

이제 배치 파일 에서 다음 변수를 읽을 수 있음을 알 수 있습니다 .

%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(원격 공유 경로)

… 그리고 당신은 항상 변수에서 올바른 가치를 얻습니다.


답변

나는 개인적으로 Toms의 대답이 마음에 들었습니다. 이것은 나에게 힌트를 주었다 :

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


답변

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


답변

다른 방법은 다음과 같습니다.

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

“.”와 함께 작동합니다. 경로명의 공백

무엇을합니까?

  1. 전체 파일 이름 (driveletter-path-filename-extension)을 MyPathVar에 넣으십시오.

  2. MyPathvar 에서 파일 이름 및 확장자 제거

UNC 경로와도 작동합니다. 경로 끝에 백 슬래시가 필요한 경우. 예를 들어 두 번째 set 명령에서 \after 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"

경로 끝의 백 슬래시를주의하십시오. 끝의 백 슬래시 일 필요는 없습니다.