我在bat文件中使用此代码来编写文件。我在%statusfile%中设置了文件路径,我的代码既没有写入文件也没有写入部分
if %Counter% equ %SuccessCounter% ( echo List.csv,%Counter%,%SuccessCounter%,%date% %time%,True >> %statusfile% ) else ( set partUpload_flag=1 echo List.csv,%Counter%,%SuccessCounter%,%date% %time%,False >>%statusfile%
)
这是我得到计数器的代码,我尝试打印计数器,只获得正确的行数。我也在文件的第一行。
set statusfile=%rootpath%Input\Status.csv echo FileName,TotalLines,processedLines ,DateTime,status > %statusfile% set /a Counter =0 FOR /F "DELIMS=, TOKENS=1,2" %%p IN ( %rootpath%extras\Input.csv) Do ( set "line=%%a" set "line="!line:,=","!"" set /a Counter +=1 )
还有一件事,在我添加更多行之前,条件对我来说很好。一旦添加了更多的行,这个停止工作,即使在删除后它也无法工作..添加的行如下所示。我在else部分添加了这个。
if %ErrorCounter% gtr 1 ( set success_flag=0 set Attachment= %Attachment% -attach %rootpath%extras\error.csv echo %date%%time% ERROR:Error found in records : %ErrorCounter% lines >> %logpath% )
如何解决问题,因为我无法找到调试方法。
答案 0 :(得分:1)
完全按原样运行代码,除了存根未知变量:
set counter=1
set successcounter=1
set statusfile=output.txt
跑得很好。你可以在你为counter,successcounter和statusfile设置变量的地方张贴?我非常怀疑您可能会遇到以批处理文件读取方式设置变量的问题。
P.S。也改变了
successcounter=2
看到“False”,表现得如预期,所以语法不是问题。
答案 1 :(得分:0)
看起来没有达到if条件,你可以发布整个块吗?以下是我尝试的行,它仍在为我工作(我尝试了真实和虚假陈述):
if 1 equ 1 (
echo abc,123,%date%,%time%,true >>true.txt
) else (
echo abc,123,%date%,%time%,false >>false.txt
)
编辑:似乎问题就是你如何设置变量。您需要将=
放在var旁边(除非您打算将var与空格一起使用)示例set /a Counter+=1
。像这样:
set statusfile=%rootpath%Input\Status.csv
echo FileName,TotalLines,processedLines ,DateTime,status > %statusfile%
set /a Counter=0
FOR /F "DELIMS=, TOKENS=1,2" %%p IN ( %rootpath%extras\Input.csv) Do (
set "line=%%a"
set "line="!line:,=","!""
set /a Counter+=1
)
如果您没有更改,那么您需要将变量与空格一起使用,如下所示:if %Counter % equ %SuccessCounter%