批处理脚本:如何移动和替换现有文件

时间:2019-06-25 18:41:20

标签: batch-file

我的工作是从文件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中的数据。

我该怎么做?

1 个答案:

答案 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的结果如何。