我有一堆外部生成的.csv
个文件,并定期发送给我。它们每个都包含一行带有31"列"的文本。但是,它们都没有EOL
(没有LF本身或CR),所以当我尝试组合任何这些文件时,我在同一行上获得更多列,而不是一行每个文件。
我想要一种方法来自动将其添加到批处理中每个文件的末尾,输出与原始文件具有相同的文件名,可能在名称的开头添加了一个字符我新的这个过程完成了。 Ex: originalFile.csv>> 1_originalFile.csv
。
我曾尝试创建一个名为" eol.csv
"的文件。这只是(LF和CR),并创建一个批处理,将其添加到我的所有文件的末尾,但由于我是编写批处理文件的新手,我显然是不成功的。
如果可以在每个文件放入文件夹时执行此操作,那就更好了。
感谢您对此的任何想法!
答案 0 :(得分:4)
FINDSTR正则表达式$
将行尾识别为回车前的位置。所以findstr /v $
只会匹配不包含回车符的行。您可以使用此事实将回车符/换行符仅附加到需要它的文件中,而无需重命名任何文件。
命令行中的以下一个衬垫就是您所需要的:
for /f "eol=: delims=" %F in ('findstr /m /v $ *.csv') do @(echo()>>"%F"
如果将命令放在批处理脚本中,则加倍百分比。
答案 1 :(得分:1)
由于所有echo
以CRLF结尾,并且您可以使用echo/
自行回显CLRF,因此您只需使用输出重定向将CLRF附加到每个csv文件。 / p>
如果你想在你拖放到脚本上的一堆文件上运行它,它将如下所示:
@for %%A in (%*) do echo/ >>%%A
顺便说一下,这一行就是整个剧本。
答案 2 :(得分:1)
这将搜索字符串.csv
的所有_fixed
个文件名,并且对于任何未能拥有它的人,将插入一个空行并重命名。当然,为您替换pathToWherever
正确的路径,并且可以添加/s
选项以允许在命名路径中的子文件夹中进行搜索。
@echo off
for /r "C:\pathToWherever\" %%G in (*.csv) do (
echo %%G | findstr /c:"_fixed" || (
echo:>>%%G
ren "%%G" "%%~nG_fixed.csv"
)
)
答案 3 :(得分:0)
有几种方法可以将换行符附加到文件的最后一行(如果尚不存在):
findstr /V "$" "data.csv" > nul && echo/>> "data.csv"
仅当最后一行未以换行符终止时,此反向(/V
)搜索才匹配最后一行。在这种情况下,&&
将执行以下命令,该命令仅附加一个换行符。
限制:
find
:
< "data.csv" find /V "" > "data.csv.tmp" && move /Y "data.csv.tmp" "data.csv" > nul
此搜索匹配所有行,find
会将换行符附加到每条返回的行中,即使没有的最后一行也是如此。由于无法读取和写入同一文件,因此需要一个临时文件。如果没有错误发生,&&
将执行下一个命令,该命令会将临时文件移至原始文件。
限制:
more
:
more "data.csv" > "data.csv.tmp" && move /Y "data.csv.tmp" "data.csv" > nul
这只会返回所有行; more
会将换行符附加到每条返回的行中,即使最后一行都没有时也是如此。由于无法读取和写入同一文件,因此需要一个临时文件。如果没有错误发生,&&
将执行下一个命令,该命令会将临时文件移至原始文件。
限制:
sort
:
sort "data.csv" /+65535 /REC 65535 | sort /+65535 /REC 65535 /O "data.csv"
这只会返回所有行; sort
会将换行符附加到每条返回的行中,即使最后一行都没有时也是如此。令人惊讶的是,不需要临时文件(我测试了约30 MB的文件,并且没有由于I / O冲突而导致数据丢失)。尽管如此,由于管道(|
),这可能是最慢的方法。
关键是设置字符位置以进行数据之外的排序。在这种情况下,sort
似乎只是还原整个文件;这就是使用两个sort
命令的原因。但是我在Windows 7上仅用一个文件就非常快速地对其进行了测试,因此您应该对此保持谨慎。
限制:
以上所有方法都可以在for
loop中轻松实现,以便应用于多个文件;只需将data.csv
替换为for
元变量,然后(在此处的变体1中进行演示):
for %I in ("*.csv") do @(findstr /V "$" "%~I" > nul && echo/>> "%~I")
请记住,在batch-file中使用此代码时,%
-符号需要加倍。