フォルダをコピー

フォルダーをフォルダ内のサブフォルダーごと一括コピーし、そのフォルダ名はデータテーブルより取得する方法はありますでしょうか。
(データテーブルを元に繰り返し処理にしたいです)
studioⅩの『フォルダーをコピー』を使用すると、フォルダのコピーは出来ますが、

データテーブルより取得のフォルダ名
‐元ファイルのフォルダ名
‐元ファイル内のサブフォルダー

となり、欲しい形の
データテーブルより取得のフォルダ名
‐元ファイル内のサブフォルダー

とは異なってしまいました。
良い方法がありましたらご教授ねがいます。

こんにちは。

先に一点確認させて頂きたいのですが、通常のStudioとStudioX、どちらを使ってますでしょうか?
(当方、通常のStudioを使ってのフォルダコピー案は提示できますが、StudioXは使ったことがないので・・)

おはようございます。

ありがとうございます。
現在、通常のsudioを立ち上げ、左のアクティビティの中にある、
studioⅩ をクリックし、その中のフォルダをコピーを使用しておりました。

昨日は、別の方法を。。と考え、以下の状態を作ってみましたが、
以下のエラーが出てしまいました。
代入の項目では社内ネットワークを見に行かず、デスクトップ作業のみにしていたはずですが以下のエラーになってしまい、本当に不明です。
こちらも併せて分かりますでしょうか。

代入: パス ‘\161.2.5.3\seigi\05:SF推進室\個人\山本\robot\新機種登録\新機種登録フォルダコピー\FolderPath’ の一部が見つかりませんでした。

【作成robot】
範囲の読み込み 最終フォルダ名のエクセルファイル読み込み・ 変数作成

代入 FolderPath=“C:\Users\MJ034691\Desktop\sample”

★エラー箇所
代入 FolderNames=System.IO.Directory.GetFiles(“FolderPath”, “*”, System.IO.SearchOption.AllDirectories)

繰り返し(各行)

フォルダーを作成 “C:\Users\MJ034691\Desktop\新機種登録用フォルダ\新機種” & “” & row(6).ToString

ファイルをコピー
コピー元 FolderNames.ToString
コピー先 “C:\Users\MJ034691\Desktop\新機種登録用フォルダ\新機種” & “” & row(6).ToString

とりあえず代入時のエラーの件からいきましょうか。

ここのDirectory.Getfilesの第一引数に指定しているFolderPathがダブルクォートで囲まれているために
変数のFolderPathではなく、固定文字列としての「FolderPath」を探しに行っていますね。

で、この記述だと相対パス表記と認識されますので、
Main.xamlとかproject.jsonとかが置いてあるフォルダ(多分そこが「\(IP)\seigi\05:SF推進室\個人\山本\robot\新機種登録\新機種登録フォルダコピー」なんじゃないかと思いますが)を起点に、
そこの中の「FolderPath」フォルダの中身のファイル一覧を取得しようとしていて、
そんなフォルダは作っていないと思いますので、パスが見つかりませんでしたとなっている気がします。

何かの作業の拍子にダブルクォートを付けてしまったのだと思いますが、多分外せばひとまず元の挙動に戻るんじゃないでしょうか。

お試しください。

FolderNames System.String になっておりこちらが原因?とも思いましたが正確な表記が分からず、ご迷惑をお掛けしますが教えて頂きたくよろしくお願い致します。

お世話になっております。
ご回答頂きありがとうございます。
ダブルクォートが悪さをしていたのですね。
ありがとうございます。

外した結果、無事動きました。ありがとうございます。
しかし今度は違う場所で以下のエラーとなり、まだどこかに不具合が残っているようでした。
『ファイルをコピー: ファイル ‘System.String’ が見つかりませんでした。』

とんでも初心者で申し訳ございませんが、エラー箇所を教えていただけないでしょうか。

直接的な原因と、根本的な解決策とがありますので、一度のレスでは解消できなさそうですが
ちょっとお付き合いください。

■エラーの直接の原因
FolderNamesのデータ型はStringですよね?
ファイルをコピーアクティビティのコピー元には「ファイルのパスを表す」「String型の値」(=文字列)を設定する必要がありますが、
FolderNames.ToStringというメソッドでどんな文字列が出力されることを期待していたのか分かりませんが、実際には「System.String」という文字列が出力されているため、
「System.String」というファイルはどこにもないよとエラーが返ってきている状態です。

■もう一個勘違いしていると思われるポイント
今使われているアクティビティはあくまで「ファイルのコピー」なので、
フォルダのコピーには使えなかった、はず、です。
なんでか分からないのですがUiPathにはフォルダの移動、コピー用のアクティビティが存在せず、
それ用のパーツを作り込んでやる必要があります。

■根本解決・・のための第一歩
とりあえず、やりたいことをまずは再確認させてください。こういう認識でいいですか?

・「C:\Users\MJ034691\Desktop\sample」フォルダの中の各フォルダ(仮にaaa、bbbとします)を、
「C:\Users\MJ034691\Desktop\新機種登録用フォルダ」の中にコピーしたい。
・コピーする時に、「aaa」「bbb」というフォルダ名を、それぞれ
Excelを読み込んだ結果のデータテーブルの1行目7(G)列目の文字列、2行目7(G)列目の文字列に
リネームしたい

やりたい事の説明がふわっとしていたので一旦確認させていただきたく。

ご回答頂きありがとうございます。

■エラーの直接の原因
こちらですが、初心者の為、ネットで見つけた情報を見様見真似で作成した為、期待した形が正直分からない状態です。
デスクトップのsample フォルダにの中身を取りたかったので、
コピー元として使う為に、一旦変数としたかった。 ということになります。

■もう一個勘違いしていると思われるポイント
こちらなのですが、こちらも、ネット情報そのまま活用しておりました。
初心者ゆえに書かれた内容をきちんと理解出来ておらず、先程の”” のようなことが起こってました。

【ネット情報】

サブフォルダに入っているファイルも全部取得したいとき

普通に System.IO.Directory.GetFiles("フォルダ名") を使うと、サブフォルダのファイルは取得できません。指定したディレクトリ内のファイルしか取れません。

サブフォルダに入っているファイルも全部取得したいときは、このように使います。

Copied!

System.IO.Directory.GetFiles(“フォルダ名”, “*”, System.IO.SearchOption.AllDirectories)

■根本解決・・のための第一歩
やりたいこと
・「C:\Users\MJ034691\Desktop\sample」フォルダの中の
フォルダ AA、BB、CC、DD
テキストファイル ああ

これらを

・「C:\Users\MJ034691\Desktop\新機種登録用フォルダ」の中にコピーしたい。
その際、先程までは、
フォルダ名:sample の中に全て入っていましたが、コピー後は、
フォルダ名:データテーブルより取得 の中に全て入れたい。
この作業を繰り返し(各行)で行い、
また、コピー後のフォルダ名は、変数Excelを読み込んだ結果のデータテーブルの1行目7(G)列目の文字列、2行目7(G)列目の文字列に順にリネームしたい。
データテーブルの中のデータの数だけ、
sample フォルダをコピーし、リネーム後のフォルダを作りたい。

通常の作業で行う場合は、
sample フォルダをコピーし、フォルダ名を変更し別の場所へ保存する。 となります。

説明不足でご迷惑をお掛けしますがよろしくお願いいたします。

んん?いまいち実行後の形が見えませんね・・
Excelの1行目G列がXXX、2行目G列がYYYだとしたら

実行前
Desktop
└sample
. ├AA
. ├BB
. ├CC
. ├DD
. └ああ.txt

実行後
Desktop
├sample
│├AA
│├BB
│├CC
│├DD
│└ああ.txt
└新機種登録用フォルダ
. ├XXX
. │├AA
. │├BB
. │├CC
. │├DD
. │└ああ.txt
. ├YYY
. │├AA
. │├BB
. │├CC
. │├DD
. │└ああ.txt

って感じでしょうか?

何度もありがとうございます。
仰る通りのその形が希望です。

また、出来れば、txtの記載内容も別データベースより書き換え出来ればなお嬉しいです。

実行前
Desktop
└sample
. ├AA
. ├BB
. ├CC
. ├DD
. └ああ.txt

実行後
Desktop
├sample
│├AA
│├BB
│├BB
│├CC
│├DD
│└ああ.txt
└新機種登録用フォルダ
. ├XXX
. │├AA
. │├BB
. │├CC
. │├DD
. │└%%.txt
. ├YYY
. │├AA
. │├BB
. │├CC
. │├DD
. │└$$.txt

やりたい事を承知しました。
であれば指定したフォルダの中身を丸ごとコピーするメソッド「CopyDirectory」が使えると思います。
添付xamlの「メソッドを呼び出し」アクティビティをコピーして動作確認してみてください。
その際「パラメータ」プロパティの
一つ目の入力はコピー対象のフォルダパス、
二つ目の入力はコピー先のフォルダパス、
三つ目の入力はコピー先が存在していた場合の上書きする/しないの判断(True/False)
となります。

copyFolder.xaml (4.0 KB)

ありがとうございます。
お陰様で作成することが出来ました。
本当にありがとうございました。

その先の処理で、txtの記載内容を別データベースより書き換えしたく
文字列を追加書き込み アクティビティを使用しました。
しかし、

Error ERROR 検証エラー 式 “来月度新機種.row(4).ToString” の処理中にコンパイル エラーが発生しました。
‘row’ は ‘System.Data.DataTable’ のメンバーではありません。 Main.xaml

とエラーになりました。
度々でご迷惑をお掛けしますが、見て頂けないでしょうか。Main.xaml (10.7 KB)

1 Like

また、文字列を追加書き込み アクティビティの中で、
書き込み先の指定方法が分からなかったので、教えて頂きたいです。
テキストの中身の仕上がりは、

現在
★★
○○○

書き込み後
★★
:heavy_multiplication_x::heavy_multiplication_x::heavy_multiplication_x:

にしたいです。

ひとまずは上手くいったようでよかったです。
テキスト追加書き込みについては話題が散逸してしまうので
別トピックにした方がいいかもしれませんね。

よろしくお願いします。

おはようございます。
なるほど、話題別に分けるのですね。
初心者で申し訳ございません。
本当にありがとうございました。

後から同じようなニーズでForumを見に来た人が探しやすいように、ですね。
探しやすさついでに、直接の解決策になった投稿
(今回だと私のcopyFolder.xamlを貼り付けたやつでしょうか)を
解決策としてチェック(Mark as Solusion?)していただけるとありがたい、かもしれません。

なるほどです!
初めて使ったので、仕組みもイマイチ分からずご迷惑をお掛けしました。
本当にありがとうございました。
また、見掛けられましたら、どうぞ今後ともよろしくお願いいたします。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.