Perlで異なるフォルダからファイルをコピーし、ファイル名を変更する方法を教えてください

このQ&Aのポイント
  • Perlで異なるフォルダからファイルをコピーし、ファイル名を変更する方法を教えてください。
  • 前回の質問に引き続き、Perlを使用して異なるフォルダからファイルをコピーして、ファイル名を変更する方法について教えてください。
  • この質問では、Perlを使用して異なるフォルダからファイルをコピーし、ファイル名を変更する方法についてのアドバイスをお願いします。
回答を見る
  • ベストアンサー

Perlで異なるフォルダからファイルをコピーし、ファイル名を変更する方法を教えてください

前回類似するお願いをしたのですが、 もう一度ご質問させてください。 <やりたいこと> c:\scriptフォルダにある「copyAndRename.cgi」を  起動し、ファイルコピーとRenameをする処理を  行ないたい。 <ファイルコピーの内容> C:\test1フォルダにあるファイル名「test.test.csv」 を、c:\test2フォルダにコピーする <ファイルRenameの内容> C:\test2フォルダにコピーした、ファイル 名「test.test.csv」の「.」をなくし「-」を置き換え、「test-test-csv」とファイル名に変更する処理をしたい。 <できていること> (1)の処理は行なえているので問題ありません。 (2)の処理に関しては、以前の質問させていただいた  回答から、下記のようなスクリプトを書き、実行した  が、Renameされませんでした。 ----- $A="test.test.csv"; $B=$A; $B=~s/\./-/; # ドットを全置換により[-]に変更。 rename $A,$B; ----- 実行している、「copyAndRename.cgi」が格納されている c:\svriptフォルダに、「test.test.csv」をおいて テストをしてみると正常に起動します。 renameを行なう際のパスの切り方がわかれば 解決できると思うのですが、わかりません。 初心者の質問で恐縮ですが、どなたかお教えください。

  • shocQ
  • お礼率23% (3/13)
  • CGI
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.1

もっとスマートな解決方法があるかも知れません。 ----- $A="test.test.csv"; $B=$A; $B=~s/\./-/g; # ドットを全置換により[-]に変更。 $path = "c:\\test2\\"; rename $path.$A, $path.$B; -----

shocQ
質問者

お礼

おかげさまで問題解決することができました。 本当に助かりました。ありがとうございました。

関連するQ&A

  • エクセル マクロ 特定のフォルダ内 ファイルコピー

    エクセルのセルに入力されたフォルダを参照して、 CSVファイルを シート1・2・3・4に1度にコピーしたいのですが 例えば C\ドキュメント¥フォルダA |-フォルダB |-フォルダC                 |-フォルダD                 |-フォルダE                        |-フォルダ1                             |-CSVファイルA                         |-フォルダ2                             |-CSVファイルB                          |-フォルダ3                             |-CSVファイルC                         |-フォルダ4                              |-CSVファイルD 上記のアドレスで シート1のA1セルに フォルダEを入力し  シート2に CSVファイルA シート3に CSVファイルB シート4に CSVファイルC シート5に CSVファイルD それぞれすべての内容を貼り付けたいのですが 何分初心者なもので ご指導いただければと思います。  ちなみに A1セルの入力は変わるため各シートは1度削除した上で再度貼り付けを行いたいです。     

  • 条件にあった特定のファイルのフォルダ名を得る

    よろしくお願いします。 階層的に存在するファイル(すべて同名)で、条件にあった記述がされているファイルのフォルダ名を得たいのですが、どのような方法が考えられるでしょうか? 漠然とした質問で申し訳ありません。 例えば、 TEST--+--A--TEST.txt      |      +--B--TEST.txt      |      +--C--TEST.txt というフォルダ階層でフォルダ"/TEST/A~/TEST/C"があり、それぞれ"TEST.txt"というファイルを持っているとします。 その中の"/TEST/B/TEST.txt"だけ"dummy"という記述が1行あったとするとき、フォルダ名"/TEST/B"を抽出したいのですが何か良い方法はあるでしょうか? (実際の各フォルダ名は規則性なくかなりの量があります) サーバー・・・HP-UX CGI開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • まとめてファイル名を変更したい

    あるフォルダに存在するファイル名に”RAWDATA"を含むテキストファイルを 任意のファイル名でCSVに変更したいのですが、 バッチファイルで set /p filename= rename d:\あるフォルダ\RAWDATA*.txt %filename%*.csv で簡単にできるかなと思ったのですが、 ”RAWDATA”の部分は入力した分しか変更されないようでした。 例えば”abc”と入力すると”abcDATA”となります。 入力したファイル名に置き換わるようにするには どのようにしたら良いのでしょうか? バッチ初心者ですがよろしくお願いします。

  • Windows ファイル名を別プログラムに渡したい

    単純作業の自動化のため、スクリプト化しようとしています。 多数のファイルを1つずつループして、 exeファイル(例:CMD.exe)に渡して実行したいだけです。 CMD.exeにはオプションを指定したいです。 (例: -a -b "C:\...\folder" "C:\...\file" (対象ファイル名) ) フォルダ名やファイル名には空白や&などの文字が含まれているケースがあります。 また、ファイル名は"でくくられていたり、いなかったりします。 まずbatで実施してみました。 test.bat "C:\...\CMD.exe" -a -b "C:\...\folder" %1 この場合、引数のファイルが"でくくられていればファイル名に空白が含まれていても大丈夫でしたが、 &が含まれているとそこでファイル名が分断され、ファイルが見つからずに エラーになってしまいました。 また、引数のファイル名が"でくくられず、かつ空白を含む場合にもファイル名が分断されエラーになります。 そこで以下のようにもしてみました。 "C:\...\CMD.exe" -a -b "C:\...\folder" "%1" 今度はファイル名が"でくくられている場合に、CMD.exeには""("を2つ)でくくられて渡されてしまい、ファイルが見つからないエラーになります。 回避方法が分からず、PowerShellで実施しようと以下のように実施しました。 test.ps1 $CMD = """C:\......\CMD.exe"" -a -b ""C:\...\folder"" """ + $file-path + """" Invoke-Expression $CMD これだと、「式またはステートメントのトークン'-a'を使用できません。」などの エラーになります。 -aなどのCMD.exeの実行オプションがInvoke-Expressionの実行オプションとして 判断されているようにも見えます。 ファイルの処理なんてほとんどの処理ですることですし、 "があろうとなかろうと、バッチやPowerShellの予約語があろうとなかろうと、 自動エスケープして処理する方法があっても良い気がするのですが、 見つかりませんでした。 一般的な処理方法についてご教示いただければ幸いです。

  • 特殊フォルダへのファイルコピー

    win10 ofice2016 ユーザレベル:Administrator パソコン利用者に、共通で使用するプログラムのコピー及び起動の設定をexcelマクロで対応しています。 Win10のRS5バージョンアップの影響か、従来動作していたマクロが動作しなくなりました。 c:\A\B.bat を スタートメニュー及び、共通ディスクトップにコピーするマクロ で下記の内容です。 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile Source:="C:\A\B.bat", Destination:="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\InspecStart.bat" FSO.CopyFile Source:="C:\A\B.bat", Destination:="C:\Users\Public\Desktop\InspecStart.bat" Set FSO = Nothing 上記実行で 実行時エラー'70': 書き込みできません とのエラーが出てしまいます。 ちなみに ' FSO.CopyFile Source:="C:\A\B.bat", Destination:="C:\work\B.bat" はコピーできます。 また、エクスプローダ上でのコピーはできます。 このフォルダへのコピーは管理者権限が必要です。 と表示され、続行でコピー可です。 ファイルのコピーを手動でやれば済むのですが、パソコン等はリースです。 リース更新時に沢山の設定するのは手間なので、特殊フォルダへのコピーを簡単に対応可能な手段があればとのおもいです。 excelマクロにはこだわりませんが、サーバからのファイルコピー等はマクロで実行するので、一緒に起動用のファイルをコピーで対応できたらと思った次第です。 サーバからファイルをc:\A配下へコピー。 Aフォルダ配下の起動ファイルを特殊フォルダ2ケ所に設定したいのです。 よろしくお願いします

  • バッチファイルで、指定したフォルダをコピーしたい

    Windowsを立ち上げたら指定のフォルダを、 Bドライブに毎回コピーさせたく、バッチファイルを 作っているのですが、全くうまくいきません。 xcopy c:\Program Files\test b:\test2\ 上記のように書いてみましたが、コピーされませんでした。 Cドライブのtestフォルダを、Bドライブのtest2フォルダに コピーさせたいのですが、何か間違っているのでしょうか? アドバイスくださればうれしいです。

  • エクセル:フォルダ内のファイル数を数える

    1つのファイルを選択後、 そのファイルを開いてある操作をし、閉じる。 その後自動的に、同一フォルダ内のファイルを開いて同様の操作をし、閉じる。 これをフォルダ内のファイル全てに対して行う、 というマクロを組みたいです。 例えば、 フォルダAに、File1.csv, File2.csv, File3.csv, File4.csv の4ファイルがある時、 File3.csvを選んで操作を実行(csvファイル内のセルA4の値を、マクロを実行したExcelファイルにコピー)。 実行完了後、File3.csvは閉じる。 続けて、File1,File2,File4についても、 開く→コピーする→閉じる、を繰り返す。 フォルダ内全てのファイルに対して実行したら終了。 ファイル名は、常にFile+数字.csvではありませんが、拡張子は常にCSVです。 素人考えでは、フォルダ内のファイルの数と名前を取得し、ループで回せばいいと思うのですが、 「フォルダ内のファイルの数と名前を取得」する関数でもあるのでしょうか? 他に何か楽な方法でもあれば、教えてください。

  • バッチファイル 現在のフォルダ名をファイル名に置き換える

    こんにちは。超初心者なのですが教えてください。 ある複数フォルダに格納されている.txtファイルを、現在の フォルダ名を取得して、別フォルダにリネームして 格納するバッチファイルを作成したいと考えています。 for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。 例えば、 データ取得元として以下のファイルがあったら C:\temp\20100101\data1.txt C:\temp\20100101\data2.txt C:\temp\20100101\data3.txt C:\temp\20100102\data1.txt C:\temp\20100102\data2.txt C:\temp\20100103\data1.txt C:\temp\20100103\data2.txt これを別フォルダに、現在のフォルダ名をファイル名にくっつけて 以下のように一つのフォルダに纏めて格納したいと思っています。 ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド を使うかもしれないです。 C:\test\data1_20100101.txt C:\test\data2_20100101.txt C:\test\data3_20100101.txt C:\test\data1_20100102.txt C:\test\data2_20100102.txt C:\test\data1_20100103.txt C:\test\data2_20100103.txt 実装方法として以下までは考えましたが、これ以上は無理そうです。 rem set A=C:\temp rem set B=C:\test for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A" for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B" for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) ) ) ) popd? ) ) 申し訳ありませんが、お助け願います。

  • VBAでファイルをコピー

    Aというフォルダの配下に、B,Cというフォルダがあります。 Bには、b1ファイルとb2ファイルがあり、 Cには、c1ファイルがあります。 Aフォルダにa1ファイルをおき、a1ファイル内にある ボタンを押すと、Bフォルダのb1ファイルとb2ファイル Cフォルダのc1ファイルをすべてAフォルダ直下にコピーする ようにするにはどうすればいいでしょうか? dosコマンドで実行するようにはできるかと思いますが vbaでやる方法を教えて下さい。

  • 同じ名前のフォルダを作るbatファイルを教えて

    フォルダ名と同じ名前のフォルダを作るbatファイルを教えてください フォルダAの中にフォルダB、フォルダC、・・・といくつかのフォルダがあります。 フォルダAの中にbatファイルを入れて実行すると、 フォルダB、フォルダC、・・・と同じフォルダをデスクトップに作る。 元々のフォルダB、フォルダC、・・・の中にあるファイルはコピーされてない。 このようなことが出来るbatファイルをお教えください。

専門家に質問してみよう