2014-09-01 2 views
1

이 경로는 C:\dev\app\tomcat\apache-tomcat-base이고 배치 파일에는 copyFile이라는 변수로 저장되어 있습니다.배치 파일의 경로에서 폴더 이름을 가져옵니다. 해결되지 않음

나는 시도하고 그러나 copyFolderName 빈 끝나는되는 새로운 변수 copyfolderName

for /f "delims=" %%F in ("%copyFile%") do (
     set copyfolderName=%%~nxF 
) 

으로 apache-tomcat-base (폴더 이름)을 얻으려면 다음 코드를 사용하고 있습니다.

참고 :

:: Check if the file to be copied is a directory of file. If a directory define %isDirect% 
IF exist "%copyFile%\" set isDirect=directory 
:: Copy folder with all contents 
IF defined isDirect (
    ::Get name of folder for the copyingDirectory folder 
    for /f "delims=" %%F in ("%copyFile%") do (
     echo setting %%~nxF 
     set copyfolderName=%%~nxF 
    ) 
    echo BASE NAME: %copyfolderName% 
) 

BASE NAME 인쇄 아무것도 cmd를 파서 선 또는 블록을 읽고

+0

'참고 : 루프가 입력되지 않습니다'? 그러나 루프에서 폴더 이름을 얻는 곳은 무엇입니까? 또는 내가 누락 된 것이 있습니다 ... – npocmaka

+0

. for 루프 안에 echo를 추가하면 결코 호출되지 않습니다. – mangusbrother

+0

아마 전체 코드를 추가해야합니다. 문제는 위의 발췌 부분에 나와 있지 않습니다. – npocmaka

답변

3
.... 
setlocal enabledelayedexpansion 
echo BASE NAME: !copyfolderName! 
endlocal 
.... 

: 루프가

이 조각에서 촬영 입력되고 있지 않습니다 행 (괄호 안의 코드)의 경우 모든 변수 읽기는 변수 의 값으로 대체되고은 exec를 시작합니다. 코드 ute. 블록의 코드 실행이 변수의 값을 변경하면이 값은 변수의 값으로 대체 되었기 때문에 변수의 읽기 작업이 존재하지 않으므로 동일한 블록 내부에서이 값을 볼 수 없습니다.

지연된 확장을 사용하고 필요한 경우 구문 실행을 %var%에서 !var!으로 변경하여 파서에게 명령을 실행할 때까지 읽기 작업이 지연되어야 함을 나타냅니다.

:: Check if the file to be copied is a directory of file. If a directory define %isDirect% 
@echo off 
set "copyfile=c:\drivers\test folder" 
IF exist "%copyFile%\" set isDirect=directory 
:: Copy folder with all contents 
setlocal enabledelayedexpansion 
IF %isDirect% equ directory (
    ::Get name of folder for the copyingDirectory folder 
    for /f "delims=" %%F in ("%copyFile%") do (
     echo setting %%~nxF 
     set copyfolderName=%%~nxF 
    ) 
    echo BASE NAME: %copyfolderName% 
) 

테스트 출력 - -

D:\Scripts>draft.bat 
setting test folder 
BASE NAME: test folder 

가 응원, G

+1

+1이 나타나지 않습니다. 바로 대답하려고합니다 .-) – npocmaka

+0

은 마치 – mangusbrother

+0

@npocmaka처럼 잘 작동했습니다. :-) 일반적으로 타이핑을 시작하고 그것을하는 동안 foxidrive 동일하거나 더 나은 솔루션을 게시합니다. –

0

는 (나는 아래의 코드에서 테스트 폴더를 사용) 그렇게하려면 다음을 고려하십시오.

setlocal EnableDelayedExpansion 
IF exist "!copyFile!" (set isDirect=directory 
    for /f %%F in ("!copyFile!") do (
     echo setting %%~nxF 
     set copyfolderName=%%~nxF 
    ) 
    echo BASE NAME: !copyfolderName! 
) 
+0

새로운 명령 프롬프트 세션에서 시도해보십시오. :-) – npocmaka

0

원하는 경우 문제를 해결할 수 SETLOCAL enabledelayedexpansion 추가

관련 문제