none
VB.net にてDOSコマンド(ren)を実行して、ファイルの名前を変更したい RRS feed

  • 質問

  • ソースをまねて、書いています。以下のソースです。

            Dim results As String
            Dim psi As New System.Diagnostics.ProcessStartInfo()

            'ComSpecのパスを取得する
            psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
            '出力を読み取れるようにする
            psi.RedirectStandardInput = False
            psi.RedirectStandardOutput = True
            psi.UseShellExecute = False
            'ウィンドウを表示しないようにする
            psi.CreateNoWindow = True
            'コマンドラインを指定("/c"は実行後閉じるために必要)
            psi.Arguments = "/c ren c:\test\D c:\test\A /w"


            '起動
            Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
            '出力を読み取る
            results = p.StandardOutput.ReadToEnd
            '出力された結果を表示
            Console.WriteLine(results)
            'WaitForExitはReadToEndの後である必要がある
            '(親プロセス、子プロセスでブロック防止のため)
            p.WaitForExit()

    -----------------------------------------------------------------------------

            'コマンドラインを指定("/c"は実行後閉じるために必要)
            psi.Arguments = "/c ren c:\test\D c:\test\A /w"

    -----------------------------------------------------------------------------

    この部分を変えて、ファイルの名前を変えようとしているのですがうまくいかなく

    ご教授いただけたら、助かります。

    2019年7月16日 12:27

すべての返信

  • RappyKakuwane さま よろしく。

    D や A は拡張子無しのファイル フォルダ でしょうか?。
    また、 /W のオプションは見当たらないのですが ... 。  以下、参照。

    以下、Windows 10 version 1903 の cmd.exe からです。

     尚、敢えて、cmd.exe で ren を使わなくても、
     System.IO.File.Move または、
     My.Computer.FileSystem.RenameFile で事足りる気がしますが ... 。
     https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.move?view=netframework-4.8
     https://dobon.net/vb/dotnet/file/filecopy.html
     https://docs.microsoft.com/ja-jp/dotnet/visual-basic/developing-apps/programming/drives-directories-files/how-to-rename-a-file

    C:\WINDOWS\system32>cmd /?
    Windows コマンド インタープリターの新しいインスタンスを開始します。
    
    CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] 
    
    C:\WINDOWS\system32>ren /?
    ファイル (複数可) の名前を変更します。
    
    RENAME [ドライブ:][パス]ファイル名1 ファイル名2
    REN [ドライブ:][パス]ファイル名1 ファイル名2
    
    ファイル名2 には新しいドライブもパスも指定できないので注意してください。
    • 編集済み ShiroYuki_Mot 2019年7月16日 13:21 間違い訂正
    • 回答としてマーク RappyKakuwane 2019年7月16日 16:55
    • 回答としてマークされていない RappyKakuwane 2019年7月16日 16:55
    2019年7月16日 13:09
  • ShiroYuki_Motさま 返信ありがとうございます。よろしくです。

    System.IO.File.Move
    My.Computer.FileSystem.RenameFile

    だと、ファイル名の大文字を小文字に変換ができなく
    cmd.exe の ren を使って変換しようと思いました。

    一応、いろいろ試行錯誤して、
        <DllImport("KERNEL32.DLL", EntryPoint:="MoveFileW", _
          SetLastError:=True, CharSet:=CharSet.Unicode, _
          ExactSpelling:=True, _
          CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function MoveFile(ByVal src As String, ByVal dst As String) As Boolean
        End Function

    で、ファイルの文字、大小変換の問題は解決できました。

    ただ、コマンドプロンプトで ren を使って変換できたことを
    VB.netで、どやったら動かせるのか、現在、試行錯誤しているところです。

    2019年7月16日 16:17
  • 追記ですみません。

    >また、 /W のオプションは見当たらないのですが ... 。

            psi.Arguments = "/c ren c:\test\D A"

    で変換することができました。
    ありがとうございました。

    2019年7月16日 16:29