从批处理写入文件不起作用

时间:2014-05-17 01:58:49

标签: batch-file

我在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%
)

如何解决问题,因为我无法找到调试方法。

2 个答案:

答案 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%