【发布时间】:2021-04-30 08:05:12
【问题描述】:
我想创建一个 .bat 文件来帮助我遍历我的 .csv 文件。我不知道列数或行数。我只知道分隔符是分号。
所以 my.csv 示例:
a;b;c
1qw;ads;f
ads;d;da
ads;asfas;afs
我试过的代码:
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ teszt2.csv"`) do (
set /p="var=%%a"|clip
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
...但这并不好,因为它只返回最后一行,所以如果我在运行批处理文件后按 CTRL + V,结果将是:var=4:ads;asfas;afs
我想将所有数据保存到我的剪贴板。
有什么解决办法吗?谢谢!
【问题讨论】:
-
你想在剪贴板里做什么?您是否希望
a、lqw、ads和ads将每个值放在单独的一行(CSV 文件中第一个数据列的字段值),还是希望它们在剪贴板的一行中使用a;lqw;ads;ads?您的批处理文件示例对我没有任何意义。请打开command prompt,运行clip /?并阅读输出帮助。然后运行for /?并从第一页的顶部到最后一页的底部仔细完整地再次阅读输出帮助。 -
好的,执行
clip /?并阅读帮助您应该知道解决方案:clip < teszt2.csv。而已。或者你使用if exist "teszt2.csv" %SystemRoot%\System32\clip.exe < "teszt2.csv"。将未使用 UTF-16 LE 编码的文本文件的内容复制到剪贴板不需要 FOR 循环。只需执行clip.exe并通过输入重定向从文件中读取文本数据。 -
请记住在提问之前始终阅读命令的帮助文件。当一个人不知道的时候,这会让他们看起来很无知。直接来自帮助文件:
CLIP < README.TXT Places a copy of the text from readme.txt on to the Windows clipboard. -
Windows commandclip 的 Microsoft 文档和命令 clip 的 SS64 Windows CMD commands 文档均不包含有关文件大小限制的任何信息。所以我用文本编辑器 UltraEdit 创建了一个 58 622 440 字节的 CSV 文件,大约 55.9 GiB 772800 行。
-
然后我使用了
clip < test_input.csv并且需要等待几分钟直到clip.exe完成。它以仅 1024 字节 (1 KiB) 的块读取大型 CSV 文件test_input.csv,并将每个块附加到已读取的数据中,这使得处理大文件的过程非常缓慢(数百万内存重新分配和内存中的数据复制)。但是clip.exe终于完成了。然后我在 UltraEdit 中创建了一个新文件,粘贴了剪贴板内容并将文件保存为test_output.csv。两个文件的二进制比较没有返回差异。所以这么大的 CSV 文件没有问题。
标签: csv batch-file cmd