Просто делать то, что вы просили:
@echo off
for %%F in ("C:\xml\*.xml") do (
echo Processing %%F
echo Removing...
for /f "skip=17 delims=*" %%a in ("%%F") do (
echo %%a >>C:\newfile.xml
) >nul
echo Lines removed, rebuilding file...
xcopy C:\newfile.xml "%%F" /y >nul
echo File rebuilt, removing temporary files
del C:\newfile.xml /f /q >nul
msg * Done!
echo(
)
exit >nul
Но я считаю, что вы хотели "delims="
(без разделителей) или "tokens=*"
(все маркеры), не "delims=*"
(перерыв на *).
Кроме того, код может быть значительно упрощена и сделать гораздо более эффективным:
@echo off
for %%F in ("C:\xml\*.xml") do (
>"%%F.new" (for /f "skip=17 delims=" %%a in ("%%F") do echo %%a)
move /y "%%F.new" "%%F" >nul
echo %%F
)
msg * Done!
exit /b
Даже быстрее, использовать больше до тех пор, пока вы не должны сохранить TAB символов, а также файлы не являются слишком большой (в какой-то момент перенаправляется MORE зависает, ожидая нажатия клавиши при обработке больших файлов).
@echo off
for %%F in ("C:\xml\*.xml") do (
more +17 "%%F" >"%%F.new"
move /y "%%F.new" "%%F" >nul
echo %%F
)
msg * Done!
exit /b