質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

575閲覧

VB.netで呼び出したバッチファイルが正常に動作しない

sigasiga

総合スコア1

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

2クリップ

投稿2024/03/02 13:14

実現したいこと

表題の通り、VB.NETで呼び出したバッチファイルを正常動作させたいです。

前提

バッチファイルは2つのCSVファイルを結合するものです。
コードは以下になります。

merge.bat

1@echo off 2setlocal enabledelayedexpansion 3 4set /a counter=0 5 6for /f %%i in ('dir /b *.csv') do ( 7 8 echo %%i 9 if !counter!==0 ( 10 set /p _head=<%%i 11 echo !_head!>>result.csv 12 ) 13 set /a counter=!counter!+1 14 15 for /f "tokens=* skip=1" %%b in (%%i) do ( 16 echo %%b>>result.csv 17 ) 18) 19 20pause

バッチファイルを実行するVB.NETのコードは以下になります。

vb.net

1Public Class Form1 2 3 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 4 Dim testInfo As ProcessStartInfo = New ProcessStartInfo() 5 testInfo.FileName = "C:\file_merge\merge.bat" 6 System.Diagnostics.Process.Start(testInfo) 7 End Sub 8End Class

エラー内容

バッチファイルをダブルクリックすると画像のような画面になり、正常に2つのCSVファイルを結合したresult.csvが生成されます。

イメージ説明

vb.netで実行すると画像のような表示となり、result.csvが生成されません。
イメージ説明

試したこと

同エラーを検索してもヒットしなかった

補足情報(FW/ツールのバージョンなど)

バッチファイルは以下サイトを参照
【例あり】複数のcsvやtxtファイルを結合する方法を紹介!

VB.NETのコードは以下サイトを参照
【VB.Net】バッチファイルをVBで起動させてみた~やればできる~

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ファイルを読んでその中味を加工するのはバッチスクリプトが苦手とする分野で、VBなら簡単にできる分野なので、正しい解決の方向としては、バッチを起動しないでVBのみで完結させることです。

それはさておき、エラーの原因ですが、dir /b *.csvはカレントディレクトリーのcsvファイルを表示します。
貴方の思っているカレントディレクトリーと、実際のカレントディレクトリーが異なるのでしょう。
そもそも「カレントディレクトリー」ってご存じでしょうか?

簡単には、カレントディレクトリーを扱いたいファイルがあるディレクトリーに変更することです。
バッチファイルの冒頭に、pushd D:\xxxxx\yyyy\zzz等と書きます。
もし、C:\file_mergeにあるなら、pushd C:\file_merge\ですね。

追記

ファイルを読んでその中味を加工するのはバッチスクリプトが苦手とする分野で、

と書いたとおりですが、質問文のコードだと、
・空白行が無視される
・先頭の空白が無視される(前に詰まる)
・行頭が;の行が無視される
・文字 ! が消える
などの制約があるので、そういう心配の無いファイルしか扱えません。

投稿2024/03/02 13:41

編集2024/03/02 14:54
otn

総合スコア84887

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigasiga

2024/03/02 13:45

解決しました!! ありがとうございました!! 余裕があればVBのみで完結させます アドバイスもありがとうございました
otn

2024/03/02 14:55 編集

> 余裕があればVBのみで完結させます ですが、「ファイルを読んでその中味を加工するのはバッチスクリプトが苦手」を回答に補足しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問