大佬们,跪求出手。。需按照文件名合并文件并输出到指定目录。
bat吧
全部回复
仅看楼主
level 1
大神, 请问如果需要把同一个目录下多个文件合并并输出到指定的目录里, 应该怎么通过CMD BAT 实现啊? 跪求方案啊。。
源目录里面有60个文件,均是成双的。 其中yyyymmdd 与 yyyymmDD均为 是日期 例如 aa_yyyymmdd= aa_20200317, aa_yyyymmDD= aa_20200316)
aaaaa_yyyymmdd.csv
aaaaa_yyyymmDD.csv
bbbbb_yyyymmdd.csv
bbbbb_yyyymmDD.csv
....
现在想要通过CMD BAT实现的是:
1) 把前缀相同的文件(如aaaa,bbbb,cccc)合并成一个csv文件
2) 合并的时候要求把日子比较靠前的文件里面的内容,放到日子比较靠后的文件内容后面。(如:aaaa_20200317, aaaa_20200316 -> 需要把aaaa_20200316的内容放到 aaaa_20200317内容的后面)
3) 输出的文件名为日子比较靠后的那个文件。 (如:aaaa_20200317, aaaa_20200316 =》 合并后的文件名为aaaa_20200317)
4) 输出的文件可以指定在一个新建的目录
2020年03月18日 10点03分 1
level 9
不清楚你的实际文件/情况,仅以问题中的样例/说明为据
复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行
<# :
cls
@璐村惂鐢ㄦ埛_000076K馃惥 off
rem 将文件名开头具有相同字符串前缀的csv文件按文件名末尾的日期的先后顺序合并成一个文件
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@璐村惂鐢ㄦ埛_053Q95e馃惥 %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$oldfolder='.';
$newfolder='E:\xxx\新文件夹';
$ext=@('.csv');
if(-not (test-path -liter $newfolder)){[void](md $newfolder)};$n=1;
$dic=New-Object 'System.Collections.Generic.Dictionary[string,Object]';
$files=@(dir -liter $oldfolder|?{($ext -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});$b=50;
for($i=0;$i -lt $files.length;$i++){
$name=$files[$i].BaseName.split('_',2);
if(-not $dic.ContainsKey($name[0].toLower())){
[System.Collections.ArrayList]$a=@();
$dic.add($name[0].toLower(),$a);
};
[void]$dic[$name[0].toLower()].add($files[$i]);
};
foreach($it in $dic.Keys){
[System.Collections.ArrayList]$s=@();
$newfile=$newfolder.trimend('\')+'\'+$dic[$it][$dic[$it].count-1].Name;
if($n -ge [int]([char]$b).toString()){exit;};
for($i=$dic[$it].count-1;$i -ge 0;$i--){
write-host $dic[$it][$i].Name;
$text=[IO.File]::ReadAllText($dic[$it][$i], [Text.Encoding]::Default);
[void]$s.add($text.trim());
};$n++;
write-host ('--> '+$newfile);
[IO.File]::WriteAllLines($newfile, $s, [Text.Encoding]::Default);break;
}
2020年03月18日 15点03分 3
level 1
感谢大神出手啊[大拇指]
我改了一下输出的path, 但只是生成了一个合并文件, 怎么可以他重复把其他的文件也按照一样的方式合并和生成啊?
如下图:
源目录 有 aaaa,bbbb, cccc
目标目录只是生成了aaaa合并后的文件
2020年03月19日 05点03分 4
1