• 締切済み

別のフォルダにコピー

Visual Basic Express 2012 テキストボックスにファイルをD&Dして、絶対パスを取得して 名前を変更してコピーしています。 D:\test\aaa.txt → D:\test\aaa_abc.txt "cmd /c copy " & filen1 & ".txt " & filen1 & "_abc.txt" filen1は拡張子なしの絶対パスになっています。 末尾に文字を追加してコピーしているのですが、パスの途中に 文字を追加したいです。 D:\test\aaa.txt → D:\test\old\aaa_abc.txt 上記のように別のフォルダにコピーするにはどうしたら良いでしょうか?

みんなの回答

回答No.2

・パスからディレクトリ名を得る Path.GetDirectoryName http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.path.getdirectoryname.aspx ・パスからファイル名を得る Path.GetFileName http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.path.getfilename.aspx ・パスからファイル名 (拡張子抜き) を得る Path.GetFileNameWithoutExtension http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.path.getfilenamewithoutextension.aspx ・パスから拡張子を得る Path.GetExtension http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.path.getextension.aspx ・パスの要素を結合する Path.Combine http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.path.combine.aspx このあたりのメソッドを使ってファイル名を組み立てて,File.Copyメソッドでファイルをコピーします。 http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.file.copy.aspx

yurielna
質問者

補足

ありがとうございます。 リンク先にある例を見て試してもうまく行かなかったのですが、 下記とは結果違うのでしょうか? http://homepage1.nifty.com/rucio/main/dotnet/Samples/dnSampleGetFileName.htm

回答No.1

こんにちは。 フルパスで書かれたファイル名にフォルダ名を追加したいならば、 1.フルパス名を、パス名とファイル名に分離する。   filen1 = D:\test\aaa → filen_p = D:\test\ , filen_f = aaa 2.パス名に新たなフォルダ名を追加する。   filen_p=filen_p & "old\" 3.パス名とファイル名を結合して元に戻す。   filen1 = filen_p & filen_f という操作をすればよいです。 ファイル名を分離する方法は、初歩的な方法ならばinstrrev関数で最後尾の"\"の位置を検索して、Mid関数で切り出す方法があります。Pathクラスを使うなら、GetFullPath 関数とGetFileName 関数でできます。 D:\test\old\ フォルダが生成されていない可能性があるならば、事前に存在を確認して、無い場合はフォルダを作成してからcopyを実行すればよいです。

yurielna
質問者

お礼

ありがとうございます。 教えて頂いた方法で作ってみます。

関連するQ&A

  • バッチでファイルをリネームして別フォルダ移動に行き詰まり・・・

    バッチ(コマンドプロンプト)でファイルをリネームして別フォルダに移したいのですが行き詰ってしまったのでどなたかご教示ください。当方XPの環境です。 まず、今日(例:2月4日時点で)簡単に説明するとあるフォルダに3つファイルが存在します。 「test1」フォルダに「AAA200711.txt」「AAA200712.txt」「AAA200801.txt」があるとします。 数字はその月に作ったファイルと思ってください。 そのファイルを「test2」フォルダへ移したいと思っています。 移す際にファイル名をリネームしたいと思います。 2008年1月のものを「AAA1.txt」2007年12月のファイルを「AAA2.txt」といった感じでやるつもりです。 当方で考えた下記の構文でですが先月、先々月のものはうまくリネームしてコピーされました。 ですが3ヶ月前のファイルだけなぜか出来ません。 下記にあるのはそのまんまコピーしたものになります。 原因がわからず戸惑っておりますのでよろしくお願いします。 @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 copy C:\test1\AAA%LASTMONTH%.txt C:\test2\AAA1.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a TWOMONTHAGO=YYYYMM-2 if %TWOMONTHAGO:~-2%==00 set /a TWOMONTHAGO+=12-100 copy C:\test1\AAA%TWOMONTHAGO%.txt C:\test2\AAA2.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a THREEMONTHAGO=YYYYMM-3 if %THREEMONTHAGO:~-2%==00 set /a THREEMONTHAGO+=12-100 copy C:\test1\AAA%THREEMONTHAGO%.txt C:\test2\AAA3.txt ↑これがうまくいかないのです。 日付の計算とかが間違っているのでしょうか? cd /d C:\test2 del AAA*.txt

  • ログをコピーして移動させたいがうまくいかない

    ログをコピーし移動させたいのですがうまくいきません。 どなたか間違いがあったら教えてください。 タスクで時間になると起動させるつもりですが例えば「AAA200801.txt」と1月31日終わった時点で吐き出されたログを別フォルダへ「AAA.txt」と2月1日の何時かにリネームしてコピーしたものを移したいと考えています。 テストしているのですが移動しません(泣)どこか間違っていますか? @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 echo copy C:\test1\AAA%LASTMONTH% .txt C:\test2\AAA.txt また、四半期ごとに(例えば1~3月)出たログをまとめて「AAA200801.txt」を「AAA1.txt」、「AAA200802.txt」を「AAA2.txt」というようにまとめて変換して上記同様に別フォルダへリネームしてコピーしたいのですがどうしたらよいでしょうか?

  • コマンドプロンプトでファイル名を取得し別の場所にコ

    G:\aaa内に、test.txt、test1.txt、test2.txt…という風にtestまでは一緒の名前のファイルが複数入っております。 そのファイル名はそのままで、別の場所D:\hokan\内に G:\aaa\test.txt → D:\hokan\test_yyyymmdd_HHMMSS.txt G:\aaa\test1.txt → D:\hokan\test1_yyyymmdd_HHMMSS.txt G:\aaa\test2.txt → D:\hokan\test2_yyyymmdd_HHMMSS.txt という感じでコピーを置きたいのですが、どのようにバッチを作成したらよいでしょうか?

  • 実行ファイル内に保持

    Visual Studio Express 2013 Shell("cmd /c copy D:\aaa.txt " & textbox1.text & ".txt",AppWinStyle.Hide,True) 例ですが、 テキストボックスに任意の文字列を入力して、 aaa.txtをコピーするとします。 aaa.txtを固定の場所に置くのではなく、実行ファイル内に保持していて、 どのPCでも実行できるように出来ないでしょうか?

  • ファイルの先頭に文字を追加するには?

    ファイルの先頭に文字を追加するにはどうしたらよいでしょうか? ファイルの末尾に追加するなら echo 追加する文字列 >> ファイル名 でオッケーですが、 先頭に追加する方法が、単純そうなのに、調べても分かりませんでした。 例えば test.txt の中身が以下で、 aaa bbb # echo hello >> test.txt で aaa bbb hello となりますが、 hello aaa bbb とするには、どうしたらよいでしょうか。 単純なコマンドはあるでしょうか。

  • ディレクトリをコピーするツールを作ってますけど、うまくいきません。

    ディレクトリをコピーするツールを作ってますけど、うまくいきません。 何方か教えてください! 内容:1、「~/???.tmp」というディレクトリを検索し指定ディレクトリにコピーする。    2、「~/???」というディレクトリも合わせて指定ディレクトリにコピーする。    3、 指定ディレクトリから2階層下にある「aaa」ディレクトリ直下を対象とする。    4、 コピーしたディレクトリを表示する。 使い方:./cptmpDir.sh path1 path2  [-c] 引数: path1 は対象ディレクトリ     path2 はコピー先ディレクトリ -c 指定されていればディレクトリのコピーを行う。 例え以下のようなディレクトリがあるとする。 home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/cba home/ccc/bbb/aaa/ddd/efg.tmp home/ccc/bbb/aaa/ddd.tmp ./cptmpDir.sh  /home  /var/tmp [-c] を実行したら home/ccc/bbb/aaa/abc.tmp home/ccc/bbb/aaa/abc home/ccc/bbb/aaa/ddd.tmp が/var/tmpにコピーされるのが正常の働き。 私が書いたシェルは 内容1、3、4、はできたけれども 2、ができてません。 だからhome/ccc/bbb/aaa/abcがコピー対象がになっています。 以下は私が書いたシェルである。 #!/bin/ksh if [[ $# -lt 2]] then echo "usage: $0 path [-c]" exit 1 fi path2=$2 copydir=0 if [[ $3 = "-c" ]] then copydir=1 fi find $1 -maxdepth 3 -mindepth 3 -type d -name "aaa" | ¥ while read d do find $d -maxdepth 1 -mindepth 1 -type d -name "*.tmp" | ¥ while read a do if [[ $copydir -eq 1 ]] then cp -r $a $path2 echo "cp" "${a#*/}" else echo "${a#*/}" fi done done よろしくお願い致します!。 home/ccc/bbb/aaa/abcもコピーされるように!!!

  • VBSでファイル名と同じフォルダを作成し、移動させる。

    はじめまして。こんにちは。ファイル名の取得、フォルダの作成、移動ができなくて困っています。 たとえばC:\testというフォルダの中にaaa1.txt aaa2.txt,aaa3,txt・・・zzz343.txtというようにファイルがランダムにあったとします。最初の3文字は英語と決まっています。そこでaaa1.txtやaaa2.txtがあればaaaというフォルダを同じ階層に作成し、aaa1.txtとaaa2.txtを新しく作成したaaaというフォルダに移動させる。これをすべてのファイルにたいして行いたいのですがどうすればいいのでしょうか? 参考になるURLやサンプルプログラムがありましたら教えて下さい。よろしくお願い致します。

  • PHPでaタグ内のリンクの末尾に文字列を追加したい

    PHPでaタグ内のリンクの末尾に文字列を追加したいのですがやり方がわかず困っております。 やりたいことは以下のようなことです <a class="url" href="http://www.abc.com">○○</> や <a href="http://www.abc.com">○○</> となっているhrefのリンクの末尾に"AAA"などの文字列を付加したいです <a class="url" href="http://www.abc.com/AAA">○○</> や <a href="http://www.abc.com/AAA">○○</> ご存じの方がいらっしゃいましたらご教授ください。 よろしくお願いします

    • 締切済み
    • PHP
  • バッチファイル 変数を同名のフォルダ内にコピー

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ For /F "delims=" %%i in (D:\test\siteirename\readme.txt) Do Call :Sub %%i :Sub set DATA=%1 copy D:\test\siteirename\in\test.txt D:\test\siteirename\out\%DATA%\test.txt コード------------------------------------------------ readme.txtには1行目に 200910 という文字列しかなく これを変数に入れ、単純にtest.txtを【D:\test\siteirename\out】内に変数と同じ名前のフォルダを さがしてそのフォルダ内にコピーするはずなのに、【D:\test\siteirename\out】内にもコピーされてしまいます。 これはなぜでしょうか? そもそものバッチに問題があるのでしょうか? 方法をご存知の方がいれば、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 宜しくお願い致します。

  • 最新更新日のBATファイルコピーについて。

    最新更新日のBATファイルコピーについて。 どなたか教えてください。 BATを夜間スケジュール化して、あるファイルをコピーするBATを作成したいのです。 条件は (1)コピー元フォルダ C:TEST フォルダ以下に(2)~(4)のファイルがあります。 (2)コピー元ファイル名 AAABBB20101001.txt (3)コピー元ファイル名 AAABBB20101002.txt (4)コピー元ファイル名 AAABBB20101003.txt   **ファイル名の日付部分のみが可変です。 (5)コピー先 D:TESTBKK (6)コピー後ファイル名 AAABKK.txt (4)のみをコピーし(6)のファイルとして上書きコピーするbatを作成したいのです。 自分でも下記のbatを作成したみました。 @ECHO OFF SET LOGPATH=C:\test FORFILES /P %LOGPATH% /M AAA*.txt /C "cmd /c COPY /y C:\test D:\test\AAABKK.txt" /D 0 最新日付のみをコピーしたつもりが、すべてのファイルがAAABKK.txtに追加された 状態で出力されていました。どなたかアドバイスをお願いします。 他に違う作成方法があれば教えてください。

専門家に質問してみよう