Robocopy bat作成PG

備忘録

複数台のPCでrobocopy.bat作成(テキストに切り取り貼り付けなど)が面倒だったためVC#で作成
VisualStudioのWPFアプリケーションで作成
使い方としては コピー元、コピー先、ログ保存先のフォルダを指定して実行するとbatまで自動で動く

※完全に個人的な備忘録

フォーム(xaml)

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="440.549" Width="825">
<Grid>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Margin="27,92,0,277" TextWrapping="Wrap" Text="" Width="760" Height="23"/>
<Button x:Name="button1" Content="フォルダ参照" HorizontalAlignment="Left" Margin="712,128,0,0" VerticalAlignment="Top" Width="75" Click="button1_Click"/>
<Label x:Name="label1" Content="コピー元フォルダ
" HorizontalAlignment="Left" Margin="44,75,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="textBox2" HorizontalAlignment="Left" Height="23" Margin="27,187,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="760"/>
<Button x:Name="button2" Content="フォルダ参照" HorizontalAlignment="Left" Margin="712,215,0,0" VerticalAlignment="Top" Width="75" Click="button2_Click"/>
<Label x:Name="label2" Content="コピー先フォルダ " HorizontalAlignment="Left" Margin="44,161,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="textBox3" HorizontalAlignment="Left" Height="23" Margin="27,284,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="760"/>
<Button x:Name="button3" Content="フォルダ参照" HorizontalAlignment="Left" Margin="712,312,0,0" VerticalAlignment="Top" Width="75" Click="button3_Click"/>
<Label x:Name="label3" Content="ログ保存フォルダ(ファイル名は固定:result.log)) " HorizontalAlignment="Left" Margin="44,258,0,0" VerticalAlignment="Top"/>
<Label x:Name="label" Content="<robocopy Bat作成>" HorizontalAlignment="Center" Margin="27,21,608,0" VerticalAlignment="Top" FontWeight="Bold" FontSize="16" Width="182"/>
<Button x:Name="button4" Content="実   行" HorizontalAlignment="Left" Margin="375,360,0,0" VerticalAlignment="Top" Width="94" Click="button4_Click" FontSize="14" Background="#FFDDDDDD"/>
<Label x:Name="label4" Content="※フォルダを選択するとbatの実行まで行います
" HorizontalAlignment="Left" Margin="161,49,0,0" VerticalAlignment="Top"/>

</Grid>
</Window>

PG(C#)

初心者が作ったためコメントの嵐です

using System;
using System.Windows;
using System.Windows.Forms;
using System.IO;

namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

//サブルーチン アクセス修飾子 戻り値の型 サブルーチン名
private string SelectDialog()
{

// FolderBrowserDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

// ダイアログの説明を設定する
folderBrowserDialog.Description = "フォルダを選択してください";

// ルートになる特殊フォルダを設定する (初期値 SpecialFolder.Desktop)
folderBrowserDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;

// 初期選択するパスを設定する
folderBrowserDialog.SelectedPath = @"C:\Program Files\";

// [新しいフォルダ] ボタンを表示する (初期値 true)
//folderBrowserDialog1.ShowNewFolderButton = true;

// ダイアログを表示し、戻り値が [OK] の場合は、選択したディレクトリを表示する
if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//textBox1.Text = folderBrowserDialog1.SelectedPath;
//System.Windows.MessageBox.Show(folderBrowserDialog1.SelectedPath);
}

// 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照)
folderBrowserDialog.Dispose();

return folderBrowserDialog.SelectedPath;

}

//button1~3まで同じ処理のため上のサブルーチンで処理

private void button1_Click(object sender, RoutedEventArgs e)
{
textBox1.Text = SelectDialog();
}

private void button2_Click(object sender, RoutedEventArgs e)
{
textBox2.Text = SelectDialog();
}

private void button3_Click(object sender, RoutedEventArgs e)
{
textBox3.Text = SelectDialog();
}

private void button4_Click(object sender, RoutedEventArgs e)
{

//テキストボックスチェック

if (String.IsNullOrWhiteSpace(textBox1.Text) == false && String.IsNullOrWhiteSpace(textBox2.Text) == false && String.IsNullOrWhiteSpace(textBox3.Text) == false)
{

//IsNullOrWhiteSpace(string) nullまたは空ならtrue
// 空ならtrue なにか入っていればfalse

//メッセージボックスを表示する
MessageBoxResult result = System.Windows.MessageBox.Show
("実行しますか?", "質問", MessageBoxButton.YesNoCancel, MessageBoxImage.Exclamation, MessageBoxResult.Cancel);

//何が選択されたか調べる
if (result == MessageBoxResult.Yes)
{
//「はい」が選択された時

//2つのパスを結合する
string sPath = System.IO.Path.Combine(textBox3.Text, @"result.bat");

//UTF-8のためencoding省略
//streamWriterの引数2でファイル上書きではなくファイルに追加していく

/* プログラムから直でbat起動に変更のためコメントアウト
StreamWriter writer =
new StreamWriter(sPath, true);
*/

//bat実行後のログ名
string logpath = System.IO.Path.Combine(textBox3.Text, @"result.log");

//array
string aresult;
string[] array =
{
// "ROBOCOPY",'"'+textBox1.Text+'"','"'+textBox2.Text+'"',"/s","/R:1","/W:1","/NP","/TEE","/LOG:"+logpath
'"'+textBox1.Text+'"','"'+textBox2.Text+'"',"/s","/R:1","/W:1","/NP","/TEE","/LOG:"+logpath
};

//プログラムから直でbat起動に変更のためコメントアウト
//配列結合
aresult = String.Join(" ", array);
//writer.WriteLine(aresult);
//writer.Close();

//20160828add
System.Diagnostics.Process pro = new System.Diagnostics.Process();

pro.StartInfo.FileName = "Robocopy";
pro.StartInfo.Arguments = aresult;
pro.StartInfo.CreateNoWindow = false; // DOSプロンプトの黒い画面を表示
pro.StartInfo.UseShellExecute = true; // プロセスを新しいウィンドウで起動するか否か

pro.Start();

//メッセージボックスを表示する
System.Windows.MessageBox.Show("処理が完了しました", "情報", MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.OK);
}
else if (result == MessageBoxResult.No)
{
//「いいえ」が選択された時
Console.WriteLine("「いいえ」が選択されました");
}
else if (result == MessageBoxResult.Cancel)
{
//「キャンセル」が選択された時
Console.WriteLine("「キャンセル」が選択されました");
}

}
else
{
System.Windows.MessageBox.Show("フォルダを指定してください","情報", MessageBoxButton.OK, MessageBoxImage.Exclamation, MessageBoxResult.OK);
}

}//class
}
}

タイトルとURLをコピーしました