C# 批处理从文件名中获取一个部件,并使用此部件创建文件夹

C# 批处理从文件名中获取一个部件,并使用此部件创建文件夹,c#,batch-file,vb6,powershell-3.0,jobs,C#,Batch File,Vb6,Powershell 3.0,Jobs,我有这样的文件名: 414_gtmlk_videos_Mas_147852_hty1147.xls 414_gtmlk_videos_Mas_P147852_hty1147.txt 我想创建一个作业来检查文件名,并在文件名147852-P147852中的Mas之后执行该部分 并使用此部件名称创建文件夹。文件夹名称应为:147852-P147852。 最后将每个文件移到他的文件夹中 批处理从文件名中提取一个零件,并使用此零件创建文件夹我有以下名称的文件: 414_gtmlk_视频_Mas_147

我有这样的文件名:

414_gtmlk_videos_Mas_147852_hty1147.xls
414_gtmlk_videos_Mas_P147852_hty1147.txt
我想创建一个作业来检查文件名,并在文件名147852-P147852中的Mas之后执行该部分 并使用此部件名称创建文件夹。文件夹名称应为:147852-P147852。 最后将每个文件移到他的文件夹中

批处理从文件名中提取一个零件,并使用此零件创建文件夹我有以下名称的文件: 414_gtmlk_视频_Mas_147852_hty1147.xls 414_gtmlk_videos_Mas_P147852_hty1147.txt文件夹名称将为 此处:147852-P147852

这里有一种使用批处理脚本来实现这一点的方法,因为在您的问题中将其标记为批处理文件。只需相应地设置您的源目录,其余的工作应基于您提供的详细信息和我的理解

我使用了一个包含条件的简单批处理循环。我使用了下划线字符作为分隔符,并将标记设置为5以使其生效

@ECHO ON

SET Src=C:\Folder\Path
FOR /F "TOKENS=5 DELIMS=_" %%F IN ('DIR /B /A-D "%Src%\*.txt"') DO (
    IF NOT EXIST "%Src%\%%~F-P%%~F" MD "%Src%\%%~F-P%%~F"
    IF EXIST "%Src%\*%%~F*P%%~F*.txt" MOVE /Y "%Src%\*%%~F*P%%~F*.txt" "%Src%\%%~F-P%%~F"
)
GOTO EOF
进一步资源 对于/

批处理从文件名中提取一个零件,并使用此零件创建文件夹我有以下名称的文件: 414_gtmlk_视频_Mas_147852_hty1147.xls 414_gtmlk_videos_Mas_P147852_hty1147.txt文件夹名称将为 此处:147852-P147852

这里有一种使用批处理脚本来实现这一点的方法,因为在您的问题中将其标记为批处理文件。只需相应地设置您的源目录,其余的工作应基于您提供的详细信息和我的理解

我使用了一个包含条件的简单批处理循环。我使用了下划线字符作为分隔符,并将标记设置为5以使其生效

@ECHO ON

SET Src=C:\Folder\Path
FOR /F "TOKENS=5 DELIMS=_" %%F IN ('DIR /B /A-D "%Src%\*.txt"') DO (
    IF NOT EXIST "%Src%\%%~F-P%%~F" MD "%Src%\%%~F-P%%~F"
    IF EXIST "%Src%\*%%~F*P%%~F*.txt" MOVE /Y "%Src%\*%%~F*P%%~F*.txt" "%Src%\%%~F-P%%~F"
)
GOTO EOF
进一步资源 对于/


下面我有一些C代码。第一部分做了以下工作:

获取路径 获取文件名 修改完整路径以获得147852零件,介于_Mas_uu和最后一个零件之间_

    string pathToGetFile = @"C:\\";
    string[] filePaths = System.IO.Directory.GetFiles(pathToGetFile +@"\\", "*_Mas_*");
    string[] fullName = new string[filePaths.Length]; 

    for (int i = 0; i < filePaths.Length; i++)
    {
        fullName[i] = filePaths[i].Substring(filePaths[i].LastIndexOf("\\") + 1);

        filePaths[i] = filePaths[i].Substring(filePaths[i].LastIndexOf("_Mas_") + 5);
        int l = filePaths[i].IndexOf("_"); 
        filePaths[i] = filePaths[i].Substring(0, l);
现在只需将文件移动到新目录

        for (int i = 0; i < filePaths.Length; i++)
        {
            string sourceFile = System.IO.Path.Combine(pathToGetFile, fullName[i]);
            string destFile = System.IO.Path.Combine(@"C:\" + filePaths[i], @"C:\" + filePaths[i] + "\\" + fullName[i]);

            File.Copy(sourceFile,destFile,true);
        }
现在,发生了什么

档案:

C:\414_gtmlk_videos_Mas_147852_hty1147.xls C:\414_gtmlk_videos_Mas_P147852_hty1147.txt 它们将按照以下要求进行复制:

C:\147852\ C:\P147852\
下面我有一些C代码。第一部分做了以下工作:

获取路径 获取文件名 修改完整路径以获得147852零件,介于_Mas_uu和最后一个零件之间_

    string pathToGetFile = @"C:\\";
    string[] filePaths = System.IO.Directory.GetFiles(pathToGetFile +@"\\", "*_Mas_*");
    string[] fullName = new string[filePaths.Length]; 

    for (int i = 0; i < filePaths.Length; i++)
    {
        fullName[i] = filePaths[i].Substring(filePaths[i].LastIndexOf("\\") + 1);

        filePaths[i] = filePaths[i].Substring(filePaths[i].LastIndexOf("_Mas_") + 5);
        int l = filePaths[i].IndexOf("_"); 
        filePaths[i] = filePaths[i].Substring(0, l);
现在只需将文件移动到新目录

        for (int i = 0; i < filePaths.Length; i++)
        {
            string sourceFile = System.IO.Path.Combine(pathToGetFile, fullName[i]);
            string destFile = System.IO.Path.Combine(@"C:\" + filePaths[i], @"C:\" + filePaths[i] + "\\" + fullName[i]);

            File.Copy(sourceFile,destFile,true);
        }
现在,发生了什么

档案:

C:\414_gtmlk_videos_Mas_147852_hty1147.xls C:\414_gtmlk_videos_Mas_P147852_hty1147.txt 它们将按照以下要求进行复制:

C:\147852\ C:\P147852\

所以不管使用什么,比如批处理脚本、powershell、C或VB?另外,.xls和.txt都是同一个txt文件名的一部分,对吗?您能否确认文件名的前147852部分始终是结尾部分中的相同数字,该部分始终以P开头,但这些数字始终匹配?第一个数字之前的底杆数是否也始终相同?我看不到任何问题或代码可以帮助您。这是用C、VB6、Powershell…标记的。。。。您真正想用什么语言来实现这一点?所以使用什么都不重要,比如批处理脚本、powershell、C或VB?另外,.xls和.txt都是同一个txt文件名的一部分,对吗?您能否确认文件名的前147852部分始终是结尾部分中的相同数字,该部分始终以P开头,但这些数字始终匹配?第一个数字之前的底杆数是否也始终相同?我看不到任何问题或代码可以帮助您。这是用C、VB6、Powershell…标记的。。。。你到底想用什么语言来实现这一点?将结果上传到一些可访问的网站上,请不要粘贴你自己硬盘上的文件链接。@Talha:结果不是文件,而是文件名!!你说得对,我说错了。我只是想说明一下files.thx会发生什么,非常感谢您的帮助,但我在这部分中遇到了一个错误:if!目录。中存在错误!目录,另一个在File.copy中。您能给我发送此错误的文本吗?也许只是路径有问题。PS:您是否使用System.IO;导入了库?将结果上传到一些可访问的web位置,请不要粘贴自己硬盘上的文件链接。@Talha:结果不是文件,而是文件名!!你说得对,我说错了。我只是想说明一下files.thx会发生什么,非常感谢您的帮助,但我在这部分中遇到了一个错误:if!目录。中存在错误!目录,另一个在File.copy中。您能给我发送此错误的文本吗?也许只是路径有问题。PS:您是否使用System.IO;导入了库?THX亲爱的,但是这里我对关键字“MAS”的位置也有问题,例如,如果其他文件名是videos\u MAS\u 147852\u hty1147.xls,在这种情况下不会发生任何事情。另一个问题是:我可以在哪里更改关键字?我的意思是如果我想要
o使用其他关键字“ex:top”应用此批次,我可以在哪里更改它?thx@hamsmm您应该打开一个新问题并添加附加问题,因为这与您最初提出的问题不同。我还不知道您的示例文件名是或?请确认,我可能会进一步提供帮助。否则,如果您可以为更改的标准打开一个新问题。问题是我忘了包括System.io库,它现在正在为allTHX工作亲爱的,但这里我对关键字“MAS”的位置也有问题,例如,如果其他文件名是videos_MAS_147852_hty1147.xls,在这种情况下,其他命令不会发生任何事情是:我可以在哪里更改关键字?我的意思是如果我想用其他关键字'ex:top'应用此批次,我可以在哪里更改它?thx@hamsmm您应该打开一个新问题并添加附加问题,因为这与您最初提出的问题不同。我还不知道您的示例文件名是或?请确认,我可能会进一步提供帮助。否则,如果可能的话,请针对更改的标准打开一个新问题。问题是我忘了包括System.io库。它现在正在为所有用户运行thx