Нет необходимости вызывать Findstr, вам нужно только вызывать асинхронные процессы, которые вы хотите дождаться завершения, прежде чем продолжить, или вы вызываете метку в сценарии cmd, это не повредит ни с какой вероятностью, но может просто удалите этот бит, так как он не нужен.
Так что это будет означать:
FindStr /I /C:"WebDriver Sampler" sss_output.csv > tmp.csv
MOVE /Y tmp.csv sss_output.csv
Хотя Move "должен" перезаписать файл Я также сталкивался с таким поведением в прошлом, когда выполнял необходимые операции в цикле, поскольку казалось, что процесс все еще удерживает файл открытым и вызывает меня добавить.
Итак, если ничто не удерживает открытый файл, просто удалите его.
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, который может держать файл открытым с предыдущего шага.
Я проверяю, создан ли временный файл (что, если нет, то мы не соответствовали строке или у нас не было разрешения на создание временного файла). Я также проверяю, соответствовали ли мы строке в временном файле. Безфайловый метод (как я всегда был), но во всех случаях я выводил некоторый диалог и изменял цвет шрифта в зависимости от того, на каком этапе он терпит неудачу.
Посмотрите, что получилось в результате, пожалуйста.