2011-10-24 39 views
4

私たちが販売する製品の典型的なフォルダ構造の作成を自動化するバッチファイルを作成しています。 2つのオプションの引数を指定してバッチファイルを呼び出すことができます。一度にたくさんのフォルダを作成するためのサプライヤの名前とファイル。サプライヤが供給されない場合、スクリプトはサプライヤが誰であるかを標準入力を介して尋ねる。ファイルが指定されていない場合、スクリプトは作成するフォルダの名前を尋ねます。ファイルであれば、スクリプトはファイルを1行ずつ読み込み、その行の内容に基づいて名前を付けたフォルダごとにフォルダを作成します。ここで: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機能で提供1を参照していることです。どうすればこれを達成できますか?警告:私はです。バッチスクリプトには新しいので、私はちょっとばかげているように私に話をしなければならないかもしれません。

+3

%1が最初の引数です。コマンドラインから最初のパラメータを取得した場合、メインコードの後ろに 'exit/b'dayがない可能性があります。 – jeb

+0

@jeb:これは、私の意見。私はそれが推測であることを認識していますが、それはおそらく推測です。 OPのケースで間違っていたとしても、それを考慮するために他の人々(この質問に出くわすかもしれない人々)のために*可能な*回答としてそこに残るはずです。 –

+0

@jebごめんなさい、私は理解できません。「退室/退院」は何ですか?私は、$ 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

関連する問題