2011-10-24 64 views
4

我正在編寫一個批處理文件,用於自動爲我們銷售的產品創建典型的文件夾結構。我希望能夠使用2個可選參數來調用我的批處理文件;供應商的名稱和用於一次創建大量文件夾的文件。如果沒有供應商提供,則腳本通過標準輸入詢問供應商是誰。如果沒有提供文件,腳本會詢問您想要創建的文件夾的名稱。如果文件作爲參數傳遞,我希望腳本逐行讀取文件,併爲每行創建一個文件夾,以該行的內容命名。這裏是:readFile功能:如何將參數(不是命令行參數)傳遞給批處理腳本中的函數

:readFile 
    echo "Reading from file: %theFile%" 
    FOR /F "delims=," %%a IN (%theFile%) do (
     call:makeFolder %%a 
    ) 
    goto:EOF 

這裏是:makeFolder功能可選需要創建文件夾的名稱的說法。如果沒有提供參數,它會通過標準輸入詢問名稱。

:makeFolder 
    if [%1]==[] (
     set /p product="Enter product name: " 
    ) else (
     set product=%1 
    ) 
    if exist "P:\%supplier%\Products\%product%" (
     echo. 
     echo The folder '%product%' already exists. 
     echo. 
     goto:EOF 
    ) 
    mkdir "P:\%supplier%\Products\%product%\Images\Web Ready" 
    mkdir "P:\%supplier%\Products\%product%\Images\Supplied" 
    mkdir "P:\%supplier%\Products\%product%\Images\Edited" 
    goto:EOF 

我的問題是,在:makeFolder功能%1是指在命令行上給出的第一個參數,而不是在:readFile函數提供的一個。我怎樣才能做到這一點?警告:我是新的批處理腳本,所以你可能不得不跟我說話,就像我有點愚蠢。

+3

%1是第一個參數,如果你從命令行得到第一個參數,那麼在你的主代碼之後可能會有'exit/b'day缺失 – jeb

+0

@jeb:這應該是一個答案,我的想法。我意識到這是一種猜測,但這可能是一種猜測。即使在OP案例中出現了錯誤,對其他人(可能會遇到這個問題的人)來說,它仍然應該作爲一個可能的答案來考慮。 –

+0

@jeb對不起,我不明白,'exit/b'day'是什麼?我知道$ 1是命令行中的第一個參數,但據我瞭解,當引用函數的第一個參數時,您也使用$ 1。我的問題是我能做什麼來訪問傳遞給':makeFolder'的第一個參數而不引用第一個命令行參數? – MrMisterMan

回答

8

我重建文件和它的工作

@echo off 
set "supplier=C:\temp\supp\" 
set "product=Car" 
echo test1,myComment,myValue > myFile.txt 
call :readFile "myFile.txt" 
EXIT /B 

:readFile 
echo "Reading from file: %~1" 
FOR /F "usebackq delims=," %%a IN ("%~1") do (
    call :makeFolder %%a 
) 
goto:EOF 

:makeFolder 
if "%1"=="" (
    set /p product="Enter product name: " 
) else (
    set "product=%1" 
) 
if exist "%supplier%\Products\%product%" (
    echo(
    echo The folder '%product%' already exists. 
    echo(
    goto:EOF 
) 
echo "%1" 
echo mkdir "%supplier%\Products\%product%\Images\Web Ready" 
echo mkdir "%supplier%\Products\%product%\Images\Supplied" 
echo mkdir "%supplier%\Products\%product%\Images\Edited" 
goto:EOF 

但我會建議使用延遲擴展,你可以得到與特殊字符百分號展開(在這種情況下,問題不是很重要,因爲特殊字符是文件/目錄名稱的不好選擇)。

+0

...擴大(什麼?) – gromit190

+1

@Birger好的問題,5年後,我不記得我想寫什麼,所以我必須猜測 – jeb

相關問題