[リストへもどる]
一括表示

投稿時間:2004/02/03(Tue) 12:40
投稿者名:おじん
URL :
タイトル:
コマンドラインでコピーしたい
ここでのサンプルを参考に下記のようにアレンジして実行しましたがうまくコピーされません。
1.このような使い方はできないのでしょうか?
2.複数ファイルをコピーしたいのですがファイル数の制限はありますか。コマンドの文字数かも?
3.また、実行後にDOS Windowを閉じる方法を教えてください。Shell (cmdTxt,0)でも?
よろしくお願いいたします。

'フォームで
    Dim inP$
    Dim inFile()
    Dim outFile$

    inP = "c:\my Documment\"
    inFile = Array(inP & "小学校.dat", inP & "中学校.dat")
    outFile = inP & "Test.dat"
    If MultiFileCopy(inFile, outFile) = False Then
        MsgBox "copy error" '失敗
    Else
        MsgBox "copy end"   '正常
    End If
    
'Moduleで
Public Function MultiFileCopy( _
        inputFile() As Variant, _
        outputFile As String) As Boolean
    Dim n&, ret
    Dim cmdText$         'コマンド
    
    MultiFileCopy = True          '正常コピー
    If inputFile(0) = "" Then
        MultiFileCopy = False     '入力がない
        Exit Function
    End If
    'コマンドを準備
    cmdText = "Command.com /c copy" & " "
    For n = 0 To UBound(inputFile)
        cmdText = cmdText & inputFile(n) & " + "
    Next n
    n = InStrRev(cmdText, "+")
    cmdText = Left(cmdText, n - 1) & outputFile
    
    ret = Shell(cmdText, 1)     'コピー実行
    If ret = 0 Then MultiFileCopy = False '失敗
    
End Function

実行するとWindow画面が表示され、コマンドがディスプレイされることなく、
終了のプロンプトがでます。Exitを入力すると、VBに戻り、Copy endがmsgBox
されます。retの戻り値は0ではないということです。

投稿時間:2004/02/03(Tue) 12:46
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: コマンドラインでコピーしたい
>     inP = "c:\my Documment\"
「my Documment」ではなく、
「my Documents」なのでは。


で。空白を含むファイル名は、そのまま指定する事はできません。
ショートファイル名を使って指定するか、パスの両端に
『"』を加えた形で、コマンドラインに指定してください。

投稿時間:2004/02/03(Tue) 14:02
投稿者名:おじん
URL :
タイトル:
Re^2: コマンドラインでコピーしたい
> >     inP = "c:\my Documment\"
> 「my Documment」ではなく、
> 「my Documents」なのでは。
ずーっと感違いをしてつかっていました。フォルダー名を直します。
恥ずかしながら、my Documentsもあります。自分だけなら何でもよいのですが、
こんな時、恥をかきます。以後、気をつけます。
>
> で。空白を含むファイル名は、そのまま指定する事はできません。
> ショートファイル名を使って指定するか、パスの両端に
> 『"』を加えた形で、コマンドラインに指定してください。
ヒントをいただいたのに、やり方が分からないので、空白のないフォルダーに移し実行します。
魔界の仮面弁士様、いつもご丁寧なヒントをいただきながら、申し訳ありません。
「”」のこと、どこかで見たことがあるような気がします。調べてみます。