本質上,我試圖將我的代碼從批處理文件(.bat)遷移到C#控制檯應用程序。我正在使用Visual C#2010 Express。主要功能是許多命令行實用程序的基於TUI的助手。我的問題應該很簡單。但是我一直無法單獨解決它。C# - 枚舉特定文件類型的目錄,然後在循環中使用每個文件
我一直在試圖枚舉某個擴展類型的每個文件的目錄。在存儲路徑時,文件名&將當前文件擴展名到一個變量中。然後將該信息發送到每個單獨文件的cmd.exe。但我不知道如何正確地循環它。我也不認爲我已經擁有的代碼是正確的。
string patches = Directory.GetFiles(pathDir, "*.patch");
返回System.String []從我掙扎的部分
實施例重現:
@echo off
SETLOCAL EnableDelayedExpansion
:: Variables hardcoded for the sake of example.
:: Folder containing patches
set "pathDir=C:\Main\Directory\Path\External"
:: File to apply patches on
set "varFile=C:\Main\Directory\Path\file.tmp"
:: Utility that applies patches
set "progExt=C:\Main\Directory\Path\Program.exe"
cls
:: Main loop
For /F "delims=" %%A In (' DIR /B /O:N /A:-D "%pathDir%\*.patch" ') Do (
:: Announce current filename
echo Patching %%A
:: Any key to contine - Makeshift confirmation without cancel
pause
:: Arguments to invoke external application
"%progExt%" "%pathDir%\%%A" "%varFile%"
:: End Loop
)
cls
我有什麼這部分在C#迄今:
string pathDir = @"C:\Main\Directory\Path\External";
string varFile = @"C:\Main\Directory\Path\file.tmp";
string progExt = @"C:\Main\Directory\Path\Program.exe";
string patches = Directory.GetFiles(@pathDir, "*.patch");
// Set variable for current file - Missing
string cmdDebug = "/C echo "; // enable with IF statements later
System.Diagnostics.Process.Start("CMD.exe", cmdDebug + pathDir + "&& echo " + varFile + "&& echo " + progExt + "&& echo " + patches + "&& pause");
// System.Diagnostics.Process.Start("CMD.exe","/C " + progExt + " " + curPatch + " " + varFile";
這些是我的包括:
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Collections.Generic;
恕我直言,你已經忘記了c#能爲你做些什麼!你正在用它來啓動一個cmd進程,目錄服務怎麼樣,關於文件類等,你有你的拇指下的強大工具。使用它們。 – elzooilogico
@elzooilogico墊腳石,我會到那裏。我忘記了很多。這是一箇舊的項目,我轉換到FreeBSD&OS X後主要集中在tk/tcl。儘管如此,仍然無法從Windows運行。 – Terus
得到了一切工作,並獲得了更好的理解。花了很多故意破壞代碼到達那裏。但是我現在已經牢牢掌握了發生了什麼事情。兩個答案都很棒,如果沒有這兩個,我就不會獲得我現在擁有的洞察力。然而,我在我的工作中實施了良好的醫生榜樣。因此,我已經將此標記爲「正確」的答案。再次感謝你們。我需要拿起一些書並深入學習C#。 – Terus