複数台の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 } }