2017-09-11 58 views
-1

我有以下目錄結構。構建紅寶石寶石的批處理腳本

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

我想在構建文件夾中編寫批處理文件build.bat。 應該執行的任務是:

  1. 刪除包中的任何以前的文件/寶石夾
  2. plugins文件夾中的每個子目錄裏面,執行

    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]

的福爾循環i之後添加的任何線沒有被執行。在添加了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否則不區分大小寫就指示和變量而言。

這會生成/b(基本)dir上市(即只名稱)/a-d沒有數據夾,文件的匹配*.gem*。這自然會選擇*.gem*.gemspec文件(這是由move *.gem回升,因爲他們的用的東西〜n.gem短名稱(見dir /x上市)。

已經產生了上市(以內存),管道列表findstr找到所有行(即。文件名)其中/E結束/L與文字/I大小寫不敏感「.gem」。 ^轉義重定向字符告訴cmd重定向器是單引號命令對執行而不是for的一部分。 2>nul將任何不需要的「未找到」輸出從findstr重定向到無處應該出現(重定向2 = stderr)。

for分配任何線(=文件名,其可以包含空格)%%a的整體自"delims="意思是「沒有分隔符」

因此,%%a應該只包含文件(一個或多個)的名稱,其特別結束.gem

引用是一個很好的策略 - 它基本上逃避了分隔符的標準操作,如Space並刪除了它們的特殊含義。

+0

謝謝。這工作。 –