2017-11-08 1 views
1

내 공유 폴더의 "최신"폴더 경로가 포함 된 배치 파일에서 변수를 만들려고합니다.
해당 공유 폴더의 각 폴더의 끝에 버전 번호 (예 : "product_1.0.0.1")가 있습니다.일괄 처리 %% A의 마지막 문자 가져 오기

내 접근 방식은 부모 폴더를 반복하고 숫자가 가장 높은 하위 디렉터리의 마지막 문자를 확인하는 것이 었습니다.

set latest=\\Share\prod\1.0\tools\prod_1.0.0.0 
for /d %%A in ("\\Share\prod\1.0\tools") do 
    if %%A:~1 gtr %latest:~1% 
    (set latest=%%A) 

는 마지막 문자 %%A

에게 내가 어떻게이 9보다 큰 숫자를 처리하나요되는이 질문을 작성하는 내 마음에 나타나는 또 다른 문제를 얻을 수가 없기 때문에이 작동하지 않는 이유는 무엇입니까?
:~1은 마지막 문자를 얻으므로 더 나은 방법은 마지막 점 뒤의 모든 것을 얻는 것입니다. 내가 어떻게 그럴 수 있니?

+4

지연 확장을 사용하도록 설정해야합니다. 자세한 내용은 cmd console에서'setlocal /?'과'help set'을보십시오. var = %% ~ A "''set! var : ~ -1! '을''set"할 필요가 있습니다. gtr % 최신 : ~ -1 %'. '%% ~ A'는 변수보다 반복자이며 부분 문자열 추출이나 대체에 직접 사용할 수 없습니다. 그러나 % 변수 %를'%% ~ A'의 값으로 설정하는 것은 쉽습니다. 또한, Major.Minor.Build.Revision 버전 데이터를 비교하는 경우 PowerShell에서 'System.Version' 개체로 캐스팅하면 훨씬 쉽게 처리 할 수 ​​있습니다. 하위 문자열을 분할하거나 사용하지 않고 숫자를 비교할 수 있습니다. – rojo

+0

@rojo이 박쥐는 빌드의 일부가 아닙니다. 최신 폴더를 검색 할 필요가없고 필요한 파일을 "추측"할 필요가 없도록 일부 바이너리 및 빌드 드롭 폴더에서 작업하는 사람들에게 필요한 데이터를 얻는 쉬운 방법입니다. 하지만 '%% A'에 대한 설명을 해준 덕분에 각 루프마다 전형적인 것보다 더 효과적 일 것이라고 생각했습니다. – Pio

답변

1

dir /ad /oe /b "\\Share\prod\1.0\tools"을 사용할 수 있습니다. /ad 옵션은 "디렉토리 만 나열 (폴더)"을 의미하고, /oe은 "확장명 순"을 의미하고 /b은 "베어 출력"(이름 만)을 의미합니다. 확장자는 마지막 점 뒤에 오는 모든 것입니다. 그런 다음 루프에 넣고 각 결과에 latest을 설정하면 변수가 최종 결과를 얻습니다. 또는 옵션 /o-e ("역순으로 확장하여 주문")를 사용하고 첫 번째 반복 한 후 루프의 탈옥 : 위의와

set latest= 
for /f "delims=" %%a in ('dir /ad /o-e /b "\\Share\prod\1.0\tools"') do (
    set latest=%%a 
    goto exit1 
) 
:exit1 

문제는 숫자가 9 넘어 갈 때 할 것입니다. 이 문제를 해결하려면 product_1.0.0.001, product_1.0.0.002 등의 이름을 지정하면됩니다.

+0

완벽합니다! 고마워. – Pio

관련 문제