Пакетная команда для поиска и замены текста в тексте, содержащем не-TXT файл

Я работаю с iMacro на JavaScript .js файлы, которые представляют собой простые незашифрованные строки кода, как текст. Файл содержит следующий код:

var i;
for (i = 1; i <= 10; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}

этот цикл повторяется 10 раз. Я хочу принять участие от пользователя в пакетном файле, например:

set /p ID="Enter Number: " %=%

и замените это 10 на число, введенное пользователем i.e %ID%

я нашел этот вопрос: как найти и заменить текст в файле с помощью командной строки Windows окружающая среда?

но, по некоторым причинам, я должен использовать встроенные функции, доступные в командной строке Windows (не внешний, как PowerShell и т. д.) Взглянуть.

что-то пробовал (сверху ответы; не получилось)

cscript replace.vbs "C:XYZ.js" "i <= 10" "i <= %ID%"
3
задан Community
06.04.2023 22:20 Количество просмотров материала 2450
Распечатать страницу

2 ответа

этот файл vbscript, который вы даете в своем вопросе, работает

можно сказать set /p yyy=input number: или %ID% как у вас.

ниже я <= 4, к I <= %ыыы%

ыыы=44, поэтому она будет у меня <= 44

C:\blah>type a.a
var i;
for (i = 1; i <= 4; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}

C:\blah>set yyy=44

C:\blah>replace a.a "i <= 4" "i <= %yyy%"

C:\blah>type a.a
var i;
for (i = 1; i <= 44; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}
C:\blah>

так что просто сделайте файл bat с двумя строками. Один комплект /п... и заменить строку.

или только одна строка

C:\blah>set /p ggg= & replace a.a var trt

(заменит текст var на текст trt)

здесь заменять.vbs, с которым вы связаны. Я вижу, что он выполняется даже без вызова его с помощью cscript. (проверено на Win 7)

C:\blah>type replace.vbs
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close

strNewText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText  'WriteLine adds extra CR/LF
objFile.Close
C:\blah>

обновление-

вот метод, который просто переписать одну строку

@ECHO OFF

REM run like repla 4 to make i <= 4  e.t.c.
REM C:\blah>repla 4<ENTER>

for /f "tokens=1,*" %%f in (a.a) do @(
IF NOT %%f == for (
  echo %%f %%g  
) ELSE (
    ECHO for ^(int i=0; i ^<= %1; i++^)
)
)

обновление 2-

но что касается поиска id

это найти-

он смотрит на for linem разбивает его (токенизирует), используя оскорбительный вид cmd.exe для заявление. В этом случае я просто использовал пространство как делиметр(хотя это можно было бы улучшить). Затем он может найти номер, но он находит номер, за которым следует точка с запятой. Последняя строка заменяет точку с запятой на nothing, т. е. удаляет лишнюю точку с запятой.

@ECHO OFF


for /f "tokens=1-12" %%f in (a.a) do @(
IF %%f == for set num=%%l
)

echo %num:;=%

где я пишу заменить это с помощью заменить.vbs

C:\blah>type a.a
var i;
for (i = 1; i <= 10; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}
C:\crp>findit
10

C:\blah>replace a.a "i <= 10" "i <= 20"

C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}
C:\blah>findit
20

C:\blah>

обновление 3

, чтобы добавить еще одну строку после строки.. это было меня на мгновение, пока я не нашел ; необходимо бежать! партия файлы не красивые

файл, с которым вы хотите работать-a.a

файл bat, который вы запустите, - a2.bat в этом случае. но вы можете назвать его, что вы хотите

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

вы можете запустить a3.летучая мышь тоже делать то же, что и a3.летучая мышь А3.bat выглядит немного аккуратнее, потому что там я понял, что все еще могу заставить его работать, не выходя на полную мощность, избегая много вещей, поэтому a3.летучая мышь немного, но менее уродливо выглядит, чем a2.летучая мышь, но они делают то же самое.

C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
}

C:\blah>type a2.bat
@echo off
for /f "tokens=*" %%f in (a.a) do (
  echo %%f
  if %%f == iimPlay^(^"ABC.iim^"^)^; echo iimPlay^(^"DEF.iim^"^)^;
)

C:\blah>a2
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}

C:\blah>

я должен отметить, что bat-файл, который добавляет строку, работает неразрушающим методом. Так.а все тот же. Если бы вы захотели a.а чтобы измениться, можно было сделать C:\blah>a2 >b.b<ENTER> C:\blah>copy b.b a.a<ENTER> для вывода результатов пакетного файла в новый файл скопируйте его в a.a.

вот еще одна версия пакетного файла, который также работает.. на этот раз, хотя я копировать

a3.bat и a2.летучая мышь дать тот же результат.

и копия, я копия /г, так что он не попросит перезаписать файл.

так запущено А2 >б.B или А3>б.B означает результат ложиться в постель.Б затем скопировать /т б.б.и он переписывает оригинал.файл

    C:\crp>type a3.bat
    @echo off
    for /f "tokens=*" %%f in (a.a) do (
      echo %%f
      if "%%f" == "iimPlay("ABC.iim");" echo iimPlay("DEF.iim"^)^;
    )

    C:\crp>a3
    var i;
    for (i = 1; i <= 20; i++)
    {
    iimSet("loop", i);
    iimPlay("ABC.iim");
    iimPlay("DEF.iim");
    }

- просто чтобы показать, что a2 работает одинаково

    C:\crp>a2
    var i;
    for (i = 1; i <= 20; i++)
    {
    iimSet("loop", i);
    iimPlay("ABC.iim");
    iimPlay("DEF.iim");
    }

-

это можно было сделать с помощью a3 >b.Би тоже. Так как они дают одинаковый выход.

    C:\blah>a2 >b.b

    C:\blah>copy /y b.b a.a
            1 file(s) copied.

    C:\blah>copy b.b a.a  <-- you wouldn't do this line. i'm just showing the point of /y
    Overwrite a.a? (Yes/No/All):
            0 file(s) copied.

    C:\blah>copy /y b.b a.a
            1 file(s) copied.

    C:\blah>

- теперь вы видите.a был изменен, чтобы включить дополнительную строку

    C:\blah>type a.a
    var i;
    for (i = 1; i <= 20; i++)
    {
    iimSet("loop", i);
    iimPlay("ABC.iim");
    iimPlay("DEF.iim");
    }

    C:\blah>
1
отвечен barlop 2023-04-08 06:08

к сожалению, этот ответ не делает никакого "поиска", но ваш файл может быть легко переписан в небольшом количестве строк, поэтому может быть проще переписать содержимое файла...?

set /p ID="Enter Number: "
@echo off
@echo var i;> javascript.js
@echo for (i = 1; i ^<^= %ID%; i++)>> javascript.js
@echo {>> javascript.js
@echo iimSet("loop", i);>> javascript.js
@echo iimPlay("ABC.iim");>> javascript.js
@echo }>> javascript.js

это файл bat, например,js.bat

1
отвечен Kinnectus 2023-04-08 08:25

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх