2017-11-16 20 views
0

私はパブリックフォーラムから取得したバッチファイルを持っていますので、残念ながら元の著者は私には分かりません。バッチファイルは、Windowsサーバー上で実行されているプログラムによって呼び出されます。バッチファイルで*の使用?

このコードの目的は、.PDFファイルをコピーしてサーバー上の別のフォルダの場所に移動し、そのプロセスでデータベースの値に基づいてファイルの名前を動的に変更することです。

コード内で宣言された5つの変数(%1%2%3%4%5)は、バッチファイルに渡されるコマンドライン引数です。変数%1と%3は基本的にハードコードされた値ですが、変数%2、%4、%5は可変です。

コードは完全に機能しており、私のニーズに合わせて修正しました。しかし、私はコード内のステートメントの1つを理解していないので、誰かがこの方法でどのように、あるいはなぜこのように機能するかを少し光らせてくれることを期待しています。

は、私が理解していないと、23行目にアスタリスクの使い方です:%2 == *機能的

が、私はこのコードのビットの最終的な結果があることがわかっている場合は値がない場合に%2変数に設定されている場合、コードはファイル名の接頭辞を無しに設定します。そうでない場合は、接頭辞を変数にある値に設定します。

私は==比較演算子を理解していますが、この文脈ではアスタリスク文字の使用についてはわかりません。 IF%2 == ""

私はしばらくの間、Googleの周りを突き進んで、他の例や可能な説明を探しましたが、役に立たないものは見つかりませんでした。誰もこれにどのような光を当てることができますか?前もって感謝します!

ここでは、バッチファイルのコードです: - 原作者がそれを破棄

@ECHO off 

REM Set global variables 
SET OutputFolder=D:\Temp 
SET Prefix= 

REM %1 Destination sub-folder name 
REM %2 Prefix to add to file name (variable value, can be blank) 
REM %3 File extension (set to pdf) 
REM %4 Original output file location (full folder path on server) 
REM %5 Original file name 

ECHO %1 %2 %3 %4 %5 >> D:\Temp\CopyOutputLog.txt 
cd %4 

:FileExistTest 
%~dp0\SLEEP.EXE 1 
ECHO Does %5.%3 exist? ... 
IF EXIST %4\%5.%3 (GOTO CopyFile) ELSE (GOTO FileExistTest) 

:CopyFile 
ECHO About to copy %5.%3 ... 
IF %2==* (SET Prefix=) ELSE (SET PREFIX=%2) 
COPY %4\%5.%3 "%OutputFolder%\%1\%Prefix%%5.%3" 
GOTO end 

:end 
+0

これ以上考えないでください。基本的に、バッチファイル内のすべての変数は文字列です。 'IF'コマンドの基本機能は' STRINGS'を比較することです。だからあなたがしているのは、ある文字列が他の文字列と等しいかどうかを調べることだけです。唯一の例外は数字を比較することです。数字はGTR、LSSなどの比較演算子を使用できます。 – Squashman

+0

Gotcha ...私は間違いなくそれを思っていた。そのため、バッチファイルの元の作成者が、アスタリスク文字をデータベースから渡した場合、アスタリスク文字を除外したかったようです。それ以外の場合、結果のPDFファイルの名前は* .pdfになりますが、これは明らかに問題になります。 Ilya Bursovは以下の点を指摘しているので、コードが不完全であるように見えます。これは、許可されていない他の特殊文字を許可するためです。 %:| "< >とスペース。 – OtherGuy1971

答えて

0

*は、誰かがスクリプトに渡す場合ので、エラーを防止するために、ファイル名のreserved characterです。

残念ながらもっと特殊な記号があるので、このコードは部分的にしか正しくありません。

+0

%2変数の値が文字通りアスタリスク文字であるかどうかをコード内の特定の行が調べているとしますか?ああ、意味があります。アスタリスクは予約済みで、通常、すべてを意味するワイルドカードとして使用されます。そのため、コードは私にとって意味をなさないのです。 – OtherGuy1971

関連する問題