3.18.6 bjexu_pcopy(ファイルの複写)
(1) 機能
1個,または複数個のディレクトリに存在するファイルを,ほかのディレクトリへ複写する。複写するファイルは,ファイル名で特定したり,すべてのファイルを対象にしたりできる。なお,ディレクトリ名での複写や,ディレクトリの再帰コピーはできない。
複写元は1個,または複数個指定でき,入力ディレクトリと呼ぶ。複写先は1個だけで出力ディレクトリと呼ぶ。
入力ディレクトリが2個以上指定されている場合,指定した順にすべての入力ディレクトリを順次処理する。ただし,bjexu_pcopy制御文がSELECT文のMEMBER指定の場合だけは,先に指定された入力ディレクトリに対象のファイルが見つかると,後続の入力ディレクトリに同じ名称のファイルがあっても無視する。詳細については,「(4)(b) SELECT文」の注意事項を参照のこと。
複写する対象をすべてのファイルやファイルの総称名(ファイル名の頭文字)で指定した場合,複写するファイルの順序はシステムの状態によって異なる。
(2) 入出力構成
bjexu_pcopyの入出力構成を次の図に示す。
(a) 入力
-
入力ディレクトリ
複写の入力となる,複写元のディレクトリ。
-
制御文(SYSIN)
bjexu_pcopyの処理内容を指定する。制御文には次のものがある。
-
COPY文
-
SELECT文
-
EXCLUDE文
-
INDD文
-
(b) 出力
-
出力ディレクトリ
複写の出力となる,複写先のディレクトリ。
-
メッセージ(SYSPRINT)
bjexu_pcopyが出力するメッセージの出力先。
(c) 終了コード
bjexu_pcopyの終了コードを次の表に示す。
終了コード |
意味 |
---|---|
0 |
正常に処理を終了した。※1 |
4 |
エラーが発生したが続行できるため,エラーを無視して処理を続行した。詳細については,出力されたメッセージを参照のこと。※2 |
8 |
エラーが発生した。エラーの発生したコピーオペレーションの処理を終了し,次のコピーオペレーションの処理を続行する。詳細については,出力されたメッセージを参照のこと。 なお,ファイルの新規作成やファイルの置き換え指定の複写で,文法解析終了後の複写処理中にエラーが発生した場合,出力ファイルの内容は保証されない。 |
12 |
次に示すような回復できないエラーが発生したため,処理を打ち切り,ジョブステップを終了する。ファイルの新規作成やファイルの置き換え指定の複写で,文法解析終了後の複写処理中にエラーが発生した場合,出力ファイルの内容は保証されない。
|
注※1 入力ディレクトリと出力ディレクトリが同じときは何もしないで処理を終了する。この場合も終了コードは0になる。
注※2 文法的に正しいが,要求された処理を実行できなかった場合,またはSELECT文で指定したファイルがないので処理できなかった場合やSYSPRINTでオープンエラーが発生した場合の終了コードは4になる。
(3) ジョブ定義XMLファイル
bjexu_pcopyを実行する場合は,次に示すEXEC要素とDD要素の指定が必要である。
(a) EXEC要素
EXEC要素のPGMにbjexu_pcopyを指定する。
<EXEC PGM="bjexu_pcopy" />
(b) SYSPRINTのDD要素
bjexu_pcopyが発行するメッセージの出力先を指定する。なお,DD連結指定はできない。出力先には,SYSOUTデータファイルや恒久ファイルを指定できる。
SYSPRINTが使用できない状態の場合,経過メッセージは出力されない。出力メッセージの詳細については,「10. メッセージと終了コード」を参照のこと。
(c) 入力ディレクトリのDD要素
複写元となる入力ディレクトリ(TYPE="DIR")を指定する。DD連結指定はできない。
(d) 出力ディレクトリのDD要素
複写先となる出力ディレクトリ(TYPE="DIR")を指定する。DD連結指定はできない。
(e) SYSINのDD要素
bjexu_pcopy制御文を指定する。または,この制御文が記述されたファイルのパスを指定する。DD連結指定はできない。
(4) bjexu_pcopy制御文
bjexu_pcopy制御文と機能を次の表に示す。
制御文名 |
機能 |
---|---|
COPY文 |
複写元の入力ディレクトリから複写先の出力ディレクトリへファイルを複写する。 |
SELECT文 |
複写するファイルを指定する。 |
EXCLUDE文 |
複写しないファイルを指定する。 |
INDD文 |
入力ディレクトリを指定する。 |
bjexu_pcopy制御文は,コピーオペレーションおよびコピーステップという概念を用いる。
コピーオペレーションとは,COPY文で始まり,後続のCOPY文または指定した制御文の終わりまでの一連の制御文である。
COPY文で始まるコピーオペレーションは,1個以上のコピーステップを含んでおり,SELECT文やEXCLUDE文の直後のINDD文がコピーステップの開始と先行するコピーステップの終了を示す。コピーオペレーションおよびコピーステップの概念については,「図3-34 コピーオペレーションおよびコピーステップの概念」を参照のこと。
複写処理は,コピーオペレーションの指定順に実行し,複数のコピーステップに分割される場合も,コピーステップ単位に順次実行する。
コピーオペレーションには,1個の複写先の出力ディレクトリと,1個以上の複写元の入力ディレクトリが含まれる。また,コピーオペレーションを幾つかのコピーステップに分割することで,コピーステップ単位に入力ディレクトリを変えることができる。
SELECT文やEXCLUDE文は,コピーステップ単位に複写するファイルや複写しないファイルを指定する。SELECT文やEXCLUDE文の指定がない場合は,入力ディレクトリにある全ファイルを複写する。なお,出力ディレクトリに複写するファイルと同じ名称のファイルがすでに存在する場合は,ファイルの置き換え指定があるときだけ複写する。置き換え指定は,入力ディレクトリ単位や,SELECT文のファイル名やファイル総称名でも指定できる。複写元のファイルが,どれかの置き換え指定に該当すれば,出力ディレクトリに同じ名称のファイルがあっても複写される。
各制御文のオペランドは,1つの制御文中に同じオペランドを複数指定できない。同じオペランドを複数個指定した場合は,最後に指定したオペランドだけが有効になる。
(1)〜(3)入力ディレクトリIN1,IN4,IN2,IN3から,出力ディレクトリOUTAへの複写であることを示す。
(4)〜(5)(1)〜(3)で指定した入力ディレクトリから,ファイルM1,M2,M3,M4,M5,M6だけ複写する。
(6)〜(7)入力ディレクトリIN5,IN6から,出力ディレクトリOUTAへの複写であることを示す。
(8)(6)〜(7)で指定した入力ディレクトリから,ファイルM7,M8を除いて複写する。
(9)出力ディレクトリOUTBへの複写であることを示す。
(10)入力ディレクトリIN7,IN8から,(9)で指定した出力ディレクトリへの複写であることを示す。
(11)(10)で指定した入力ディレクトリから,ファイルM9,M10,M11を除いて複写する。
(12)〜(13)入力ディレクトリIN9,IN10,IN11から,出力ディレクトリOUTBへの複写であることを示す。後続にSELECT文とEXCLUDE文の指定がないため,すべてのファイルを複写する。
注 コピーステップ内の入力ディレクトリは,制御文に指定した順序で処理される。例えばコピーステップ1の場合,最初にIN1を処理し,続いてIN4,IN2,IN3の順に処理する。
(a) COPY文
■ 形式
[記号] △1 COPY △1 |
OUTDD=DD名 [,INDD=({DD名|(DD名,R)}[,{DD名|(DD名,R)}]…)] [,LIST=NO] |
■ オペランド
- OUTDD=DD名 〜<環境変数名>((1〜31文字))
-
出力ディレクトリのパス名を定義したDD名を指定する。このオペランドは必須である。
- INDD=({DD名|(DD名,R)}[,{DD名|(DD名,R)}]…)
-
-
DD名 〜<環境変数名>((1〜31文字))
入力ディレクトリのパス名を定義したDD名を指定する。このオペランドの指定は任意であり,後続のINDD文でも指定できる。
このオペランドを省略する場合,COPY文の直後にINDD文の指定が必要である。INDD文の指定がなければ,エラーメッセージを出力して,このコピーオペレーションを無効とし,次のコピーオペレーションを処理する。
-
R
出力ディレクトリ中に,複写するファイルのファイル名またはSELECT文(MEMBERオペランド指定)で名前を変更して複写する場合は,新しいファイル名と同じ名称のファイルがすでに存在するとき,ファイルの置き換えを指定する。ファイルの置き換えを指定するには,DD名とキーワードRを括弧で囲むこと。
-
- LIST=NO
-
処理したファイルのファイル名などの詳細なメッセージを出力する必要がないときに指定する。出力しないメッセージは,KAKD1100-I〜KAKD1105-Iメッセージである。このオペランドを省略すると,すべてのメッセージを出力する。
■ 注意事項
-
COPY文はコピーオペレーションの開始を示す制御文であるため,コピーオペレーションの先頭にあること。
-
INDDオペランドでファイルの置き換えを指定する場合,(DD名,R)の指定の途中で行を変えないこと。
-
INDDオペランドとOUTDDオペランドで同じディレクトリのパス名を指定した場合,SELECT文やEXCLUDE文の指定があるとエラーになり,そのコピーオペレーションを終了する。
(b) SELECT文
■ 形式
[記号] △1 SELECT △1 |
{MEMBER=({ファイル名|(ファイル名,,R)|(ファイル名,新ファイル名[,R])} [,{ファイル名|(ファイル名,,R)|(ファイル名,新ファイル名[,R])}]…) |GROUP=({ファイル総称名|(ファイル総称名,R)} [,{ファイル総称名|(ファイル総称名,R)}]…)} |
■ オペランド
- MEMBER=({ファイル名|(ファイル名,,R)|(ファイル名,新ファイル名[,R])}[,{ファイル名|(ファイル名,,R)|(ファイル名,新ファイル名[,R])}]…)
-
-
ファイル名 〜<引用文字列または特殊文字列>
複写するファイル名を指定する。
-
新ファイル名 〜<引用文字列または特殊文字列>
名前を変更して複写するとき,新しいファイル名を指定する。
-
R
複写先の出力ディレクトリに,複写するファイルのファイル名または名前を変更して複写する場合は,新しいファイル名と同じ名称のファイルがすでに存在するとき,ファイルの置き換えを指定する。
-
- GROUP=({ファイル総称名|(ファイル総称名,R)}[,{ファイル総称名|(ファイル総称名,R)}]…)
-
-
ファイル総称名 〜<引用文字列または特殊文字列>
複写するファイルをファイル群の総称名(ファイル名の頭文字)で指定する。例えば,ABCと指定した場合,ファイル名がABCで始まるすべてのファイルが対象となる。
-
R
複写先の出力ディレクトリに,複写するファイルと同じ名称のファイルがすでに存在するとき,ファイルの置き換えを指定する。
-
■ 注意事項
-
同一コピーステップ内でEXCLUDE文と同時に指定できない。
-
新ファイル名の指定やファイルの置き換えを指定する場合,(ファイル名,,R),(ファイル名,新ファイル名,R),および(ファイル総称名,R)の指定の途中で行を変えないこと。
-
同一コピーステップ内で同一のファイル名(新ファイル名も含む),およびファイル総称名を指定しないこと。
-
同一コピーステップ内でSELECT文は複数指定できる。
-
同一コピーステップ内でMEMBERとGROUPを同時に指定できない。
-
COPY文およびINDD文よりあとに記述すること。
-
ファイル名およびファイル総称名には,パス名の区切りを示す文字(/:スラント)を指定できない。
-
MEMBERオペランド指定とその他の指定では,複写するファイルの選択方法が異なる。
次にSELECT文のMEMBERオペランド指定以外の場合とSELECT文のMEMBERオペランド指定の場合の複写するファイルの選択方法を示す。
- SELECT文のMEMBERオペランド指定以外の場合
-
SELECT文のGROUPオペランド指定,EXCLUDE文指定,またはSELECT文およびEXCLUDE文を指定しない全ファイルの複写指定のときは,入力ディレクトリの指定順に,入力ディレクトリごとに複写処理する。
- <例>入力ディレクトリIN1→IN2→IN3の順に,ファイル総称名がAとBのファイルを複写する。ただし,入力ディレクトリIN1配下の対象ファイルは置き換えを行わない。
-
-
制御文
-
処理の流れ
1. IN1を参照する。指定に該当するファイルAは,出力ディレクトリに同じ名称のファイルが存在し,置き換え指定がないため複写しない。
2. IN2を参照する。指定に該当するファイルBは,置き換え指定があるため複写する。
3. IN3を参照する。指定に該当するファイルAとBは,置き換え指定があるため複写する。
図3‒35 複写処理の流れ(SELECT文のMEMBERオペランド指定以外の場合)
-
- SELECT文のMEMBERオペランド指定の場合
-
SELECT文のMEMBERオペランド指定は,指定されたファイル名単位に,入力ディレクトリの指定順を検索し,最初に見つかったファイルだけ複写する。
ファイルを置き換える指定がないため,複写しなかった場合も,ファイルは見つかったものとする。
- <例>入力ディレクトリIN1→IN2→IN3の順に,ファイル名がAとBのファイルを検索し複写する。ただし,ファイルAは置き換えを行わない。
-
-
制御文
-
処理の流れ
1. ファイルAをIN1から検索する。IN1でファイルAが見つかったが,出力ディレクトリに同じ名称のファイルAが存在し,置き換え指定がないため複写しない。この時点でファイルAの処理は終了する。
2. ファイルBをIN1から検索する。IN2でファイルBが見つかったため,これを複写する。この時点でファイルBの処理は終了する。
図3‒36 複写処理の流れ(SELECT文のMEMBERオペランド指定の場合)
-
(c) EXCLUDE文
■ 形式
[記号] △1 EXCLUDE △1 |
MEMBER=(ファイル名[,ファイル名]…) |
■ オペランド
- MEMBER=(ファイル名[,ファイル名]…) 〜<引用文字列または特殊文字列>
-
出力したくないファイル名を指定する。
■ 注意事項
-
同一コピーステップ内で同一のファイル名を指定できない。
-
同一コピーステップ内でSELECT文と同時に指定できない。
-
EXCLUDE文は複数指定できる。
-
同一コピーステップ内はCOPY文およびINDD文よりあとに記述すること。
(d) INDD文
■ 形式
[記号] △1 |
INDD=({DD名|(DD名,R)}[,{DD名|(DD名,R)}]…) |
■ オペランド
- INDD=({DD名|(DD名,R)}[,{DD名|(DD名,R)}]…)
-
-
DD名 〜<環境変数名>((1〜31文字))
入力ディレクトリのパス名が設定されたDD名を指定する。
-
R
出力ディレクトリ中に,複写するファイルのファイル名またはSELECT文(MEMBERオペランド指定)で名前を変更して複写する場合は,新しいファイル名と同じ名称のファイルがすでに存在するとき,ファイルの置き換えを指定する。ファイルの置き換えを指定するには,DD名と"R"を括弧で囲む。
-
■ 注意事項
-
COPY文と組み合わせて指定する。
-
SELECT文やEXCLUDE文の直後に指定した場合は,コピーステップの開始と先行するコピーステップの終了を示す。出力ディレクトリは,先行するコピーステップのCOPY文から引き継がれる。
(5) 使用例
- <例1>2つの入力ディレクトリからすべてのファイルを複写する。なお,同じ名称のファイルは置き換えない。
-
次の手順で複写が実行される。
-
制御文のCOPY文に指定したINDDオペランドの入力ディレクトリの指定順に,出力ディレクトリ"OUTPUT"へ複写する。
-
最初に入力ディレクトリ"INPUT1"にあるファイルAとCが複写される。
-
入力ディレクトリ"INPUT2"にあるファイルBとCの複写を行うが,ファイルCはすでに同じ名称のファイルが2.で複写されているため複写しない(置き換え指定がないため)。
図3‒37 入力ディレクトリからすべてのファイルを複写(置き換え指定なし)
-
(1)bjexu_pcopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ディレクトリを定義する。ディレクトリは,"file1"を指定する。
(4)入力ディレクトリを定義する。ディレクトリは,"file2"を指定する。
(5)出力ディレクトリを定義する。ディレクトリは,"file3を指定する。
(6)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(7)コピーオペレーションの開始を示す。出力ディレクトリとしてOUTPUT(ディレクトリfile3)を指定し,入力ディレクトリとしてINPUT1(ディレクトリfile1)とINPUT2(ディレクトリfile2)を指定する。
- <例2>入力ディレクトリからファイル名がAとCのファイルを置き換え指定ありで複写する。なお,出力ディレクトリには,ファイル名がBとCのファイルがすでに存在する。
-
次の手順で複写が実行される。
-
制御文のCOPY文に指定した入力ディレクトリ"INPUT1"から,出力ディレクトリ"OUTPUT"へ複写する。ただし,複写するファイルはSELECT文の指定に従う。
-
SELECT文の指定に従い,"INPUT1"に存在するファイルAとCを複写する。このとき,"OUTPUT"にはすでに同じ名称のファイルCが存在するが,置き換え指定があるため"INPUT1"のファイルで置き換えられる。
図3‒38 入力ディレクトリからすべてのファイルを複写(置き換え指定あり)
-
(1)bjexu_pcopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ディレクトリを定義する。ディレクトリは,"file1"を指定する。
(4)出力ディレクトリを定義する。ディレクトリは,"file3"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)コピーオペレーションの開始を示す。出力ディレクトリとしてOUTPUT(ディレクトリfile3)を指定し,入力ディレクトリとしてINPUT1(ディレクトリfile1)を指定する。
(7)メンバの取り出しを指定する。入力ディレクトリINPUT1からメンバA,Cをメンバの置き換え指定で出力ディレクトリに複写する。
- また,この例の場合は,次の制御文でも同じである。
(1)コピーオペレーションの開始を示す。出力ディレクトリとしてOUTPUT(ディレクトリfile3)を指定し,入力ディレクトリとしてINPUT1(ディレクトリfile1)を指定する。また,INPUT1で指定したディレクトリに存在するファイルは,メンバの置き換え指定を行う。
(2)メンバの取り出しを指定する。入力ディレクトリINPUT1からメンバA,Cを取り出し,出力ディレクトリに複写する。