Просто удалите лишнее пространство из вашего источника;)
@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%A in (C:\test\Index.txt) do (
set line=%%A
echo(!line:~1!>>C:\test\Index1.txt
)
Я также использовал echo( для защиты от строк, которые становятся пустыми, когда вы удаляете первый символ. ECHO без каких-либо следующих результатов в ECHO is off. сообщение в вашем выводе.
Ваш упрощенный скрипт отлично работает во многих случаях. Но это будет иметь проблемы, если ваш вклад содержит ! символ, или если вам нужно сохранить пустые строки. Есть решения для этих проблем, но код становится более сложным и медленным.
Я использую гибридную утилиту JScript/batch REPL.BAT всякий раз, когда я хочу изменить содержимое файла. Он выполняет поиск и замену регулярных выражений в stdin и записывает результат в stdout.
Предполагая, что REPL.BAT находится в вашем текущем каталоге, или, что еще лучше, где-то в вашем PATH, тогда ваш скрипт может быть заменен следующим одним вкладышем, который будет быстрее и надежнее:
type "C:\test\Index.txt"|repl "^." "" >"C:\test\Index1.txt"