我正在尝试使用批处理文件根据文件名复制文件。
文件名的格式为aaa_xx-XX-ccc.txt
,其中aaa
和ccc
无关紧要(可变长度),但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;等
答案 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