فرض رو بر این میگیرم که REM ها حذف بشن.
سطر 1 و 4، غیر فعال کردن اکو
سطر 2 و 3، شرحی که میده کمکی نمی کنه.
سطر 5، کپی کردن فایل های ftp که می توانید با کد #C هم انجامش بدید.
سطر 7 الی 11 تنظیم کردن پورت سریال ئه که استفاده اش برای یک برنامه دیگه است و داخل #C هم باید از همین فرمان MODE استفاده بشه.
اینکه در #C پورت سریال رو باز کنیم و چبری بهش بفرستیم یا داده بگیریم با این توضیحات این فایل معنی نداره. این فایل شما پورت سریال رو برای استفاده یک برنامه دیگه تنظیم میکنه، خودش کاری با پورت نداره.
سطر های 12 و 13 ایجاد کردن پوشه است که در #C هم میشه انجامش داد.
سطر 14 اختصاص دادن یک درایو مجازی :K به یک مسیر فایل ئه که در #C هم با همین SUBST قابل انجام ئه.
سطر های 15 و 16 تنظیم مجدد پورت LPT3 روی یک سخت افزار (معمولا پرینتر) تحت شبکه است که در #C هم با همین فرمان انجام شدنی است.
سطر 17 تغییر نام فایل های JPG به BMP است که اونم در #C قابل انجام ئه.
سطر 18 انتظار ئه که برای #C اجراش منطقی نداره.
چند تا مساله هست، اول اینکه در این فایل Batch شما اشاره نشده که در ادامه کدوم برنامه باز بشه. در واقع صندوقی که میخواد باز بشه در این فایل باز نشده.
شما می توانید تخصیص پورت LPT3 رو ملاک لحظه باز شدن بگیرید ولی ظاهرا این مورد دیگری است.
به هر حال شما می توانید در یک فایل متنی یا یک کلید Registry تاریخ و ساعت فعلی رو ثبت کنید که مشخص بشه کی این کد #C رو اجرا می کنید.
بعد هر زمان که لازم شد به اون فایل یا کلید Registry ویندوز مراجعه میکنید تا ببینید از کی بازش کردید. هر وقتم بستیدش اون فایل یا کلید Registry رو حذف می کنید.
یک متد میسازیم که بوسیله اون یک فرمان Command Prompt رو اجرا کنیم :
private static void ExecuteCommand(string command, out string output)
{
try
{
var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/C " + command)
{
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
RedirectStandardOutput = true
};
var process = System.Diagnostics.Process.Start(startInfo);
process.WaitForExit();
output = process.StandardOutput.ReadToEnd();
}
catch (Exception ex)
{
output = ex.Message;
}
}
یک متد میسازیم که بوسیله اون یک برنامه سیستمی رو اجرا کنیم :
private static void ExecuteApplication(string fileName, string arguments, out string output)
{
try
{
var startInfo = new System.Diagnostics.ProcessStartInfo(fileName, arguments)
{
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
RedirectStandardOutput = true
};
var process = System.Diagnostics.Process.Start(startInfo);
process.WaitForExit();
output = process.StandardOutput.ReadToEnd();
}
catch (Exception ex)
{
output = ex.Message;
}
}
و یک متد میسازیم که بوسیله اون زمان باز شدن صندوق رو ثبت کنیم :
private void CashierOpened()
{
System.IO.File.WriteAllText(@"C:\Start.txt", DateTime.Now.ToBinary().ToString());
}
و یک متد میسازیم که موقع بسته شدن صندوق اجراش کنیم :
private void CashierClosed()
{
if (System.IO.File.Exists(@"C:\Start.txt"))
{
System.IO.File.Delete(@"C:\Start.txt");
}
}
و یک متد میسازیم که هر وقت خواستیم مدت زمان باز بودن صندوق رو دریافت کنیم :
private TimeSpan GetElapsedTime()
{
if (System.IO.File.Exists(@"C:\Start.txt") == false)
{
return TimeSpan.Zero;
}
var startTime = DateTime.FromBinary(long.Parse(System.IO.File.Read AllText(@"C:\Start.txt")));
return DateTime.Now.Subtract(startTime);
}
حالا فرمان های داخل فایل Batch رو میتونیم اجرا کنیم :
string output;
//ExecuteCommand(@"COPY C:\temp\sh*.fpt DEMOCOMP\shdata", out output);
//ExecuteApplication("MODE.COM", @"COM1: 96,N,8,1", out output);
//ExecuteApplication("MODE.COM", @"COM2: 96,N,8,1", out output);
//ExecuteApplication("MODE.COM", @"COM3: 96,N,8,1", out output);
//ExecuteApplication("MODE.COM", @"COM4: 96,N,8,1", out output);
//ExecuteApplication("MODE.COM", @"COM5: 96,N,8,1", out output);
//ExecuteCommand(@"MD C:\TT", out output);
//ExecuteCommand(@"MD C:\TT\TEMP", out output);
//ExecuteApplication("SUBST.EXE", @"K: C:\TT", out output);
ExecuteApplication("NET.EXE", @"USE LPT3: /DELETE", out output);
ExecuteApplication("NET.EXE", @"USE LPT3: \\BO1\ZEBRA /PERSISTENT:YES", out output);
//ExecuteCommand(@"REN DEMOCOMP\IMDATA\IMAGES\*.JPG *.BMP", out output);
CashierOpened();
و هر زمان لازمه صندوق بسته بشه اینکار رو در فایل منعکس می کنیم :
private void button1_Click(object sender, EventArgs e)
{
CashierClosed();
}
و هر زمان لازمه مدت زمان باز بودن صندوق رو داریم :
MessageBox.Show(GetElapsedTime().ToString());
ولی اینجا هر چیزی مشخص هست جز اصل کاری، صندوق رو نه باز میکنیم و نه میدونیم چطور باز میشه. در فایل Batch تون همچین چیزی مشخص نیست.