【发布时间】:2016-06-10 09:04:43
【问题描述】:
我对批处理文件和 Windows 命令行一无所知,我正在尝试编写一个批处理文件,该文件将在给定文件夹位置运行并验证那里存在的所有文件的文件名。
可以使用正则表达式验证文件名:
^[a-zA-Z0-9]{1,20}\-[a-zA-Z0-9]{1,40}\-[0-9]{8}(\-[0-9]+)?\.[a-zA-Z]{2,4}$
鉴于正则表达式是正确的。
或者如果正则表达式没有用,在人类语言中,文件名应该是:
alphaNumerricMax20char-alphaNumerricMax40char-8charDateofFormatyyyyMMdd.extension
我之前写过一段C#代码,如下:
rtbResult.Text = string.Empty;
List<string> fileNamesNotValid = new List<string>();
string[] allFilesInDirectory = new string[0];
try
{
if (Directory.Exists(txtFolderLocation.Text))
{
allFilesInDirectory = Directory.GetFiles(txtFolderLocation.Text);
foreach (string file in allFilesInDirectory)
{
var fileName = Path.GetFileName(file);
if (Regex.IsMatch(fileName, @"^[a-zA-Z0-9]{1,20}\-[a-zA-Z0-9]{1,40}\-[0-9]{8}(\-[0-9]+)?\.[a-zA-Z]{2,4}$"))
{
var dataComponent = fileName.Split('-')[2].Split('.')[0];
try
{
DateTime date = DateTime.ParseExact(dataComponent, "yyyyMMdd",
System.Globalization.CultureInfo.InvariantCulture);
if (date > DateTime.Now)
{
fileNamesNotValid.Add(fileName);
}
}
catch (Exception)
{
fileNamesNotValid.Add(fileName);
}
}
else
{
fileNamesNotValid.Add(fileName);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
foreach (var item in fileNamesNotValid)
{
rtbResult.Text += item + "\n";
}
MessageBox.Show("Process Completed!!\n Total Files proccessed = " + allFilesInDirectory.Count() + "\n Total Invalid Files = " + fileNamesNotValid.Count);
【问题讨论】:
-
嗨,这是一个问答论坛;您在这里的确切问题是什么?
-
不清楚你想要什么,因为你似乎已经有代码来做这件事——你可以从批处理文件中运行它。如果您询问如何使用批处理文件对文件夹中的每个文件执行操作,请查看以下内容:stackoverflow.com/questions/180741/…
标签: c# batch-file