我有一个固定长度数据的文本文件。 该文件包含3个字段。第一个是7个字符,第二个是19个字符,最后一个是6个字符。 我写了一个批处理文件,将其转换为CSV文件。 由于组织限制,我不能安装任何外部程序,如powershell所以我需要它是纯DOS命令 我写了下面的脚本,但似乎我错过了一些东西。 有什么想法吗?
for /F "tokens=*" %%A in (test.txt) do (
set %MYVAR%=%%A
set mer=%MYVAR:~0,7%
set cr=%MYVAR:~7,19%
set dt=%MYVAR:~26,6%
set "y=%mer%,%cr%,%dt%"
echo %y%>> test.csv
答案 0 :(得分:1)
在批处理中,当在代码块中使用变量时(即括号内的代码),您需要enabledelayedexpansion
并使用感叹号而不是百分号。
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in (test.txt) do (
set var=%%A
set mer=!var:~0,7!
set cr=!var:~7,19!
set dt=!var:~26,6!
set "y=!mer!,!cr!,!dt!"
echo !y!>> test.csv
)
哪个应该做你想做的事。
答案 1 :(得分:0)
根据您在转换后使用此CSV文件所做的操作,您可以将固定宽度的文本文件作为本地与CSV文件进行交互,而不进行子字符串提取或转换。只需在与固定宽度文件相同的目录中创建一个Schema.ini
文件,其中包含以下内容:
[filename.txt]
ColNameHeader=False
CharacterSet=1252
Format=FixedLength
Col1=mer Text Width 7
Col2=cr Text Width 19
Col3=dt Text Width 6
瞧! MS Jet,Ace和其他文本模式驱动程序现在应该将您的固定宽度文件识别为没有按摩的CSV文件。
另外,如果您想要批量实用程序与CSV文件进行交互,请you might find this useful。