2015-09-01 2 views
0

У меня есть текстовый файл со следующим содержимым:Добавление строк в определенных местах в текстовом файле

-849,4471 1272,173 22,8698 0 0 -1 7.54979E-008 Fire_Esc_6 385 792 24 -1
-837,0507 1270.862 28,1249 0 0 -1 7.54979E-008 Fire_Esc_6b 385 792 24 -1
-837,0654 1270,879 24,09248 0 0 -1 7.54979E-008 Fire_Esc_6 385 792 24 -1

Для каждой из линий, мне нужно до

  • добавить setAttr "sth"; в начале строки
  • добавить sth между первым и вторым номерами
  • удалить все на линии от 385 до конца линии

Я всего новичок в партии и не знаю, с чего начать. Любая помощь, которую вы можете вам дать, очень ценится.

Я не сделал, пока здесь помощь somethingDark в: 0

FOR /F "tokens=8* delims= " %%G IN (C:\Users\Sherlock\Documents\3DReaperDX\Frames\1.txt) DO ECHO set %%G >12.txt 
+0

Итак, что вы пробовали? Я не вижу никакого кода. Вы изучали текстовый поиск и подстановку в пакетных переменных или разбор полей с помощью 'for/f'? – paddy

+0

Вы * далеко * более вероятно получите ответ, если вы напишете немного лучше английского ... Также, показывая желаемый результат, отформатированный так же, как и ваш ввод. И, наконец, вам действительно нужно использовать BAT-файл и почему? Powershell был бы намного приятнее, например, если вы не можете установить Python или что-то еще. – hyde

+2

@hyde - пакет - вполне приемлемый язык для этого вопроса, особенно если данные последовательно отформатированы таким образом. Цикл 'for/f' с опцией' "tokens = 1-12" 'сделает короткую работу. Тем не менее, я не собираюсь отвечать на этот вопрос, потому что «напишите мой код для меня» вопросы не в тему. – SomethingDark

ответ

1

Так как вы сделали попытку решить эту проблему самостоятельно, я чувствую себя лучше о том, показывая вам, что я воображал для вашего сценария.

@echo off 

:: If 12.txt exists, delete it. This way, the entire file will be recreated when the script is re-run. 
:: (If you don't want this to happen and you just want new data added to the end of the file every 
:: time the script is run, just delete this part.) 
if exist 12.txt del 12.txt 


:: An example line looks like this: 
:: -849.4471 1272.173 22.8698 0 0 -1 7.54979E-008 Fire_Esc_6 385 792 24 -1 

:: Iterate through each line in 1.txt, storing each space-delimited string in a unique variable 
:: %%A: -849.4471 
:: %%B: 1272.173 
:: %%C: 22.8698 
:: %%D: 0 
:: %%E: 0 
:: %%F: -1 
:: %%G: 7.54979E-008 
:: %%H: Fire_Esc_6 
:: Since we don't care about anything after the eighth token, we can just ignore it 
:: The redirection command is at the start of the line to avoid an extra space at the end of the line 
for /f "tokens=1-8" %%A in (C:\Users\Sherlock\Documents\3DReaperDX\Frames\1.txt) do >>12.txt echo setAttr "sth"; %%A sth %%B %%C %%D %%E %%F %%G %%H 

Поскольку этот сценарий настолько короток (это на самом деле всего три линии с целой кучей комментариев), можно даже запустить этот Однострочник из командной строки:

for /f "tokens=1-8" %A in (C:\Users\Sherlock\Documents\3DReaperDX\Frames\1.txt) do >>12.txt echo setAttr "sth"; %A sth %B %C %D %E %F %G %H 

Это создаст файл 12.txt с содержанием

setAttr "sth"; -849.4471 sth 1272.173 22.8698 0 0 -1 7.54979E-008 Fire_Esc_6
setAttr "sth"; -837.0507 sth 1270.862 28.1249 0 0 -1 7.54979E-008 Fire_Esc_6b
setAttr "sth"; -837.0654 sth 1270.879 24.09248 0 0 -1 7.54979E-008 Fire_Esc_6

+0

Tnx для вашей помощи чувак, но у меня все еще есть некоторые проблемы с этим взглядом на вторую часть моего вопроса: в верхней части страницы я уже загрузил ее, потому что я не мог добавлять коды здесь. –

+0

@kmthrongkmthrongi - Это совершенно другой вопрос. Вы должны отметить это как принятое, а затем задать второй вопрос. – SomethingDark

+0

ОК, так что я горжусь https://stackoverflow.com/questions/32367624/ignore-some-lines-using-for-f-command но как я могу отметить это как принятое? –