标题: [文件操作] 批处理如何将所有子文件夹下的csv文件合并成一个csv,请指教,谢谢! [打印本页]
作者: xslxslxsl 时间: 2023-8-24 14:30 标题: 批处理如何将所有子文件夹下的csv文件合并成一个csv,请指教,谢谢!
如何将某个文件夹下所有子文件夹下的csv文件(会有重复文件名)合并成一个csv,请指教,谢谢!
作者: wanghan519 时间: 2023-8-24 14:57
本帖最后由 wanghan519 于 2023-8-24 17:03 编辑
兄弟,缘分啊,powershell确实很方便了
dir -Recurse *.csv | cat > out.csv
要不就用busybox打包一句
find . -iname '*.csv' -exec sed '' {} > out.csv +
好处是不管文件结尾是否有换行结果都正常
作者: qixiaobin0715 时间: 2023-8-24 15:00
- @echo off
- (for /f "tokens=1* delims=:" %%i in ('findstr /s .* *.csv') do echo,%%j)>New.csv
复制代码
作者: 77七 时间: 2023-8-24 15:01
本帖最后由 77七 于 2023-8-24 15:12 编辑
- @echo off
- (for /d %%d in (*) do (
- for /r %%i in ("%%d\*.csv") do type "%%i"
- ))>new.csv
- pause
复制代码
作者: buyiyang 时间: 2023-8-24 15:43
- @echo off
- for /d %%i in (*) do (
- pushd "%%i"
- copy /b *.csv "..\%%~nxi.cs"
- popd
- )
- copy /b *.cs new.csv
- pause
复制代码
作者: Five66 时间: 2023-8-24 16:49
合并后的文件名为:the_new_new_csv.csv
所有scv都必须以换行符结尾,不然合并后会两行凑在一起- @echo off
- cd.>the_new_new_csv.csv
- for /r /d %%i in (*) do (
- type "%%i\*.csv" >>the_new_new_csv.csv 2>nul
- )
复制代码
作者: xslxslxsl 时间: 2023-8-24 17:07
回复 2# wanghan519
powershell都不懂 ,不过还是要谢谢你!
作者: aloha20200628 时间: 2023-8-24 20:49
合为一总有一个顺序吧...按名称/时间...还有升序和降序...
也许加载 dir 排序参数 /o? 会更有帮助。- (for /f "delims=" %F in ('dir /b/s/a-d *.csv') do type "%~F")>"allInOne.csv"
复制代码
作者: hlzj88 时间: 2023-8-24 21:10
type “*.csv”>>aaa.txt
ren aaa.txt aaa.csv
这个可以吗
作者: Nsqs 时间: 2023-8-24 21:15
这样合并的不是标准的csv,只有wps能打开,office打开一般会提示格式错误
作者: 77七 时间: 2023-8-25 07:33
本帖最后由 77七 于 2023-8-25 07:48 编辑
昨天我在测试的时候就发现了一点问题,现在归纳一下
- @echo off
- rem 生成测试文件1.txt 2.txt
- >1.txt echo 1
- >2.txt echo 2
- exit
-
- rem code1
- @echo off
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do type "%%i">>new1.txt
- exit
-
- rem code2
- @echo off
- (for /f "delims=" %%i in ('dir /b /a-d *.txt') do type "%%i")>new2.txt
- exit
-
- rem code3
- rem 命令行直接执行
- for /f "delims=" %i in ('dir /b /a-d *.txt') do type "%i">>new3.txt
-
- rem code4
- rem 命令行直接执行
- (for /f "delims=" %i in ('dir /b /a-d *.txt') do type "%i")>new4.txt
复制代码
不考虑结尾换行符情况。
以上4段代码,代码1和3能得到正确结果。代码2和4不能得到正确结果。
我才发现dir 还有这个问题需要注意。
作者: qixiaobin0715 时间: 2023-8-25 09:11
回复 11# 77七
要使用type命令可以这么用:- (for /f %%i in ('type *.txt 2^>nul') do echo,%%i)>a.txt
复制代码
作者: qixiaobin0715 时间: 2023-8-25 10:04
回复 11# 77七
输出结果用.log或.temp格式,与要处理的文件扩展名不相同就不会出问题。
作者: 77七 时间: 2023-8-25 10:49
回复 13# qixiaobin0715
谢谢大佬指点!
过滤下dir的结果应该也行,但是涉及子目录或者文件名有包含被包含的,也有些麻烦,生成一个不同的扩展名可能是最省心的了。
以前发现type *.txt > 3.txt
的结果和文件名”排序“有关,可能和11楼的代码2一个“原理”。
- @echo off
- rem 生成测试文件1.txt 2.txt
- >1.txt echo 1
- >2.txt echo 2
- exit
-
- rem code1
- @echo off
- (for /f "delims=" %%i in ('dir /b /a-d *.txt') do type "%%i")>0.txt
- exit
- rem code2
- @echo off
- (for /f "delims=" %%i in ('dir /b /a-d *.txt') do type "%%i")>3.txt
- exit
复制代码
像以上代码,代码1 生成的文件名 为 0.txt “排序” 在 1.txt 2.txt 前,结果也是正确的;代码2 文件名3.txt结果则不正确。
代码1、2 分别和 type *.txt >0.txt type *.txt >3.txt 结果相同。
作者: Five66 时间: 2023-8-25 17:42
回复 14# 77七
这是重定向位置问题吧
比如:type *.txt > 3.txt
先执行 > 3.txt 产生了一个3.txt
再执行type *.txt ,由于之前产生了3.txt,星号(*)通配时将3.txt通配进去了
因为多了个3.txt导致结果可能不正确
作者: 77七 时间: 2023-8-25 19:22
本帖最后由 77七 于 2023-8-25 19:32 编辑
回复 15# Five66
大概和 for /r 有点类似。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |