批处理文件根据其名称复制文件

时间:2016-02-10 12:43:29

标签: batch-file

我正在尝试使用批处理文件根据文件名复制文件。 文件名的格式为aaa_xx-XX-ccc.txt,其中aaaccc无关紧要(可变长度),但xx是2个字符代码。我想将文件复制到各自的xx文件夹中,这些文件夹也将由脚本创建。

在这里,我找到了几乎符合我需求的东西: Batch file to copy files based on characters in filename

  

@echo off setlocal enableextensions enabledelayedexpansion for %%x in (*.txt) do ( set "filename=%%x" set "folder=!filename:~1,2!" if not exist !folder! mkdir !folder! copy "%%x" !folder! )

但我希望xx不仅要查找文件名中的位置,还要查找特定字符(下划线)和文件名中的位置。

有什么办法吗?

更新 - 示例: 我在一个文件夹中有以下文件:

MY-Project_ar-SA-2016114-12h33m10s.txt

MY-Project_cs-CZ-2016114-12h33m8s.text

MY-Project_da-DK-2016114-12h33m10s.txt

"模板"对于文件名是" [project-name] _ [language-CODE] - [dateAndTime] .txt

我想将第一个文件复制到另一个位置\ ar文件夹(例如" C:\ Output \ ar"),第二个文件复制到" C:\ Output \ cs& #34;等

2 个答案:

答案 0 :(得分:0)

根据您运行的.txt目录中的所有BAT个文件都要复制,模板严格按照您的描述进行操作。

这是一个想法:

@echo off

for /f "tokens=1,2,3* delims=_-" %%a in ('dir *.txt /b/a-d') do echo copy "%%a%%b%%c%%d" "c:\output\%%c"

如果输出正常,请移除echo之前的copy

答案 1 :(得分:0)

public void AddToNewA(string name, List<int> listOfBIds)
{
   var a = new EntityA();
   a.Name = name;

   ...
}
public class EntityA{
    public int ID {get; set;}
    public string Name {get; set;}
    public List<EntityB> EntityBList {get; set;}
}

publc class EntityB{
   public int ID {get; set;}
}

您需要更改@ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir\t w o" SET "destdir=U:\destdir" FOR /f "delims=" %%a IN ( 'dir /b /a-d "%sourcedir%\*_*-*-*.txt" ' ) DO ( FOR /f "tokens=1*delims=_" %%c IN ("%%a") DO ( FOR /f "tokens=1,2*delims=-" %%q IN ("%%d") DO ( ECHO(COPY "%sourcedir%\%%a" "%destdir%\%%q\" ) ) ) GOTO :EOF sourcedir的设置以适合您的具体情况。

为了测试目的,所需的COPY命令仅为destdir在您确认命令正确后,将ECHO更改为ECHO(COPY以实际复制文件。附加COPY以取消报告消息(例如>nul

目前无法确定目标目录是1 file copied还是xx。对XX使用xx的{​​{1}}进行了设置,以代替XX行中的%%r

仅使用掩码 _ - - .txt将文件目录读入%%q

使用copy进行标记并选择%%a,尾部

,删除前导字符直到下划线

_上的重新标记%%d。第一个标记为%%d,第二个标记为-

混合并匹配以创建%%q命令。

请注意,您的第二个文件名,... CZ ...是%%r文件名,而不是copy