我的工作是从文件sss_output.csv
中找到字符串“ WebDriver Sampler”,并将结果存储在临时文件tmp.csv
中。
然后移动文件tmp.csv
来替换现有文件sss_output.csv。
这是我的代码:
call findstr /C:"WebDriver Sampler" sss_output.csv > tmp.csv
call move /Y tmp.csv sss_output.csv
我遇到的问题是如果文件sss_output.csv
存在,则文件tmp.csv
中的数据将追加到sss_output.csv
文件中。
我希望将tmp.csv
中的数据替换为sss_output.csv
中的数据。
我该怎么做?
答案 0 :(得分:0)
不需要调用Findstr,您只需要调用要等待完成的异步进程,然后再继续,或者您在cmd脚本中调用标签,它不会很可能伤害任何东西,但是可能只需删除不必要的那一点。
这意味着:
FindStr /I /C:"WebDriver Sampler" sss_output.csv > tmp.csv
MOVE /Y tmp.csv sss_output.csv
移动“应该”覆盖文件时,过去在循环中执行有需要的操作时,我也遇到过这种情况,因为似乎有一个进程仍在保持文件打开并导致我要附加。
因此,如果没有任何东西可以打开原始文件,只需删除它即可。
IE:
( FindStr /C:"WebDriver Sampler" "sss_output.csv" > "tmp.csv" )
IF NOT EXIST "tmp.csv" ( COLOR CF & ECHO.ERROR WE DID NOT CREATE THE TEMP FILE! The String was not Matched!) ELSE ( ( DEL /F/Q sss_output.csv && MOVE /Y "tmp.csv" "sss_output.csv" ) || ( COLOR E0 & ECHO.SOMETHING CAUSED US NOT TO BE ABLE TO DELETE THE FILE OR THE File COuld Not be copied! ) )
如果有某个进程将其保持打开状态,或者文件“总是需要存在”(由于其他原因),那么您可以用tmp.csv中的内容替换内容Type
改为原始文件。
IE:
( FindStr /I /C:"WebDriver Sampler" "sss_output.csv" > "tmp.csv" )
IF NOT EXIST "tmp.csv" ( COLOR CF & ECHO(ERROR WE DID NOT CREATE THE TEMP FILE! The String was not Matched!) ELSE ( ( Type "tmp.csv" > "sss_output.csv" && DEL /F/Q "tmp.csv" ) || ( COLOR B0 & ECHO(SOMETHING CAUSED US NOT TO BE ABLE TO WRITE TO THE FILE ) )
上面的命令会将匹配的单行回显到临时文件中,然后,如果成功(意味着首先找到了匹配项),它将用临时文件中的内容替换原始文件中的内容。如果成功,它将删除临时文件。
此外,此方法将执行相同操作而不会创建临时文件:
FOR /F "Tokens=*" %%A IN ('FindStr /I /C:"WebDriver Sampler" "sss_output.csv"') DO @(
SET "_Line=%%A" & DIR 1>&0 2>NUL
)
IF DEFINED _Line (
ECHO(%_LINE%>"sss_output.csv"
COLOR A0
ECHO(We Found this Line and tried to write it to the file:
ECHO(%_LINE%
) ELSE (
COLOR CF
ECHO(ERROR: The String was not Matched!
)
我正在使用DIR 1>&0
来提早退出循环。 (我曾经使用echo.hello>&3
,但发现DIR 1>&0
的工作更为一致)
我已将它们修改为单独的行,以便我们不依赖&& s,后者可能会使上一步中的文件保持打开状态。
我正在检查是否创建了临时文件(如果不创建,则我们不匹配该行,或者我们没有创建临时文件的权限),我也在检查我们是否匹配了Temp中的行没有文件的方法(就像往常一样),但是在所有情况下,我都会回显一些对话框,并根据失败的步骤来更改字体颜色。
请查看运行eahcof的结果如何。