我们有第三方的应用程序按date(然后由实例)将数据存储到目录中,我们希望将* .csv文件从该目录复制到服务器。 我们只需要来自实例目录的数据 – 没有更高,没有更低。
示例结构(ItemX是实例,可以有子目录):
C:\APP ------ Machine1 ------ -------- Data ------ -------- ---- 081209 ------ -------- ---- ------ Item1 -> report.csv ------ -------- ---- ------ Item2 -> report.csv ------ -------- ---- 081109 ------ -------- ---- ------ Item1 -> report.csv ------ -------- ---- ------ Item2 -> report.csv ------ Machine2 ------ -------- Data ------ -------- ---- 081209 ------ -------- ---- ------ Item1 -> report.csv ------ -------- ---- ------ Item2 -> report.csv ------ -------- ---- 081109 ------ -------- ---- ------ Item1 -> report.csv ------ -------- ---- ------ Item2 -> report.csv
有没有一个通用的方式来写这个,所以我们可以创build一个脚本而不是每台机器?
如果machineX是机器的名称,则可以使用环境variables%COMPUTERNAME%
类似的东西
xcopy c:\app\%computername%\Data\*\Item?\*.csv target\* /s
这是一种可能的做法。 这不是命令行,但可以从命令行调用:
using System; using System.IO; namespace MachineInstanceCopyThing { static class Program { [STAThread] static void Main () { string AppDir = @"C:\App"; string TargetDir = @"W:\Dest"; if (!Directory.Exists (AppDir)) { // do something to report the error return; } if (!Directory.Exists (TargetDir)) { // do something to report the error return; } DirectoryInfo AppDirInfo = new DirectoryInfo (AppDir); // iterate through machine folders foreach (DirectoryInfo MachineDirectory in AppDirInfo.GetDirectories ()) { string DataPath = MachineDirectory.FullName + @"\data"; if (!Directory.Exists (DataPath)) { // do something to report the error continue; } DirectoryInfo DataDir = new DirectoryInfo (DataPath); // iterate through date directories foreach (DirectoryInfo DateDirectory in DataDir.GetDirectories ()) { // iterate through instance directories foreach (DirectoryInfo InstanceDirectory in DateDirectory.GetDirectories ()) { string TargetPath = TargetDir + @"\" + InstanceDirectory.Name; // create instance directory at the target Directory.CreateDirectory (TargetPath); foreach (FileInfo CSVFile in InstanceDirectory.GetFiles ("*.csv")) { File.Copy (CSVFile.FullName, TargetPath + @"\" + CSVFile.Name); } } } } } } }
除了确保源和目标的存在之外,在错误检查方面做得并不多。