2017-09-11 2 views
-1

다음과 같은 디렉토리 구조가 있습니다.루비 보석을 만들기위한 배치 스크립트

build 
    -build.bat 
package 
    -gems 
    -abc.gem 
    -xyz.gem 
    -install.sh 
plugins 
    -abc 
    -abc.gemspec 
    -xyz 
    -xyz.gemspec 

빌드 파일에 배치 파일 build.bat를 쓰려고합니다. 가 수행해야하는 작업은 다음과 같습니다

  1. 패키지에서 이전 파일을 삭제/보석 플러그인 폴더의 각 하위 디렉토리 내부
  2. 폴더,

    gem build *.gemspec

    이 명령은 보석을 만들 것입니다 실행 동일한 디렉토리에있는 파일.

  3. 이동 패키지로 만든 보석 파일/보석 내가 배치 프로그래밍 구문을 통과 한

폴더, 그리고 난이 배치 스크립트 여부에 의해 달성 될 수 있는지 여부도 확실하지 않다. 이 작업을 수행 할 배치 스크립트를 작성하려면 어떻게해야합니까?

[편집]

몇 가지 기본적인 연구 후 나는 많은 일들을 수행 할 수 있었다.

@echo on 

cd.. 
set CUR_DIR=%cd% 
set GEMS_DIR=%CUR_DIR%\Package\gems 
set PLUGINS_DIR=%CUR_DIR%\Plugins 

del /f/s/q/a %GEMS_DIR%\ 

cd %PLUGINS_DIR% 

for /d %%D in (*) do (
    pushd %%~fD 
    gem build *.gemspec 
    move *.gem %GEMS_DIR% 
    popd 
) 

그러나 move 명령은 .gem 및 .gemspec 파일을 모두 복사합니다. .gem 파일 만 이동하려면 어떻게 제한합니까? 또한 마지막 괄호 뒤에 추가 된 행은 실행되지 않습니다. 기타 개선 사항을 알려드립니다. 고맙습니다.

[Edit2가]

내가 FOOR 루프 후에 첨가하는 라인이 실행되지 않고 있었다. gem 명령의 앞부분에 call을 추가하면 모든 것이 정상적으로 작동합니다.

+0

이것은 매우 쉽게 수행 할 수 있습니다 - 그리고 아주 쉽게. 그러나이 사이트는 무료 코드 작성 서비스는 아닙니다. 'edit' 기능을 사용하여 게시물로 문제를 푸는 시도를 편집하십시오. 그러면 문제가 발생하면 작동 상태로 만들려고 시도 할 수 있습니다. – Magoo

+0

@Magoo 일괄 스크립팅에 대한 내 연구를하는 동기를 가져 주셔서 감사합니다. 귀하의 프로필에서이 라인을 좋아했습니다 - '나는 멍청하고 분명한 문제조차도 신경 쓰지 않습니다. 내 회색 물질의 남은 부분을 응고시키지 마라. ' –

+0

마지막 괄호 뒤의 줄? 넬슨이 말했듯이 "나는 어떤 선도 보지 못했다 ..." – Magoo

답변

1

대체

move *.gem %GEMS_DIR% 

for /f "delims=" %%a in ('dir /b /a-d *.gem* ^|findstr /E /L /I ".gem" 2^>nul') do move "%%a" "%gems_dir%" 

주목할와 :

%%afor 문 (외부 루프에 사용 D 아닌) 임의의 알파벳을 할 수 있고, IS 대소 문자를 구별하는 반면, batch는 대소 문자를 구분하지 않습니다. 지시와 변수에 관한 한.

이 파일은 *.gem* 일치의 /b (기본) dir 목록 (예. 이름 만) 디렉토리 이름없는 /a-d을 생성합니다. 이 자연스럽게

.()는 dir /x 목록을 보려면 그들은 ~ n.gem와 무언가의 짧은 이름을 가지고 있기 때문에 move *.gem에 의해 선택되고 *.gem*.gemspec 파일 (선택됩니다에 (목록을 생성 데 메모리), 파이프는 findstr으로 모든 라인을 찾습니다 (예 :파일 이름) /E/L 리터럴 /I 대/소문자를 구분하지 않는 ".gem"입니다. ^cmd에게 의 작은 따옴표로 실행되는 명령for이 아닌 것으로 알리기 위해 리디렉터 문자를 이스케이프 처리합니다. 2>nulfindstr에서 원하지 않는 "찾을 수 없음"출력을이없는 경우 이 아닌 곳으로 (리디렉션 2 = 표준 오류) 리디렉션합니다. "delims="가 "NO 분리"따라서

, %%a 파일 (들)의 이름을 포함한다 수단 없으므로

for

%%a 행 ( 공백이있다 = 파일명) 모든 라인의 전체 할당 된 끝 부분은 구체적으로 .gem입니다.

따옴표는 단순히 좋은 정책입니다. 기본적으로 인용 부호는 공백과 같은 분리 기호의 표준 연산을 빠져 나와 특별한 의미를 제거합니다.

+0

고맙습니다. 이것은 효과가 있었다. –

관련 문제