Этот файл VBScript, который вы даете в своем вопросе, работает
Вы можете сказать set /p yyy=input number:
или% ID%, как у вас.
Ниже я изменяю i <= 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>
Так что просто сделайте файл с двумя строками.
Один с set /p ... и один со строкой замены.
Или только одна строка
C:\blah>set /p ggg= & replace a.a var trt
(заменит текст var на текст trt)
Вот replace.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-
но как найти идентификатор
Это делает НАЙТИ-
он смотрит на строку for, разбивает ее (токенизирует), используя оскорбительный вид cmd.exe для оператора. В этом случае я просто использовал пробел в качестве разделителя (хотя это можно улучшить). Затем он может найти номер, но он находит номер, за которым следует точка с запятой. В последней строке точка с запятой заменяется ничем, т. Е. Удаляет ошибочную точку с запятой.
@ECHO OFF
for /f "tokens=1-12" %%f in (a.a) do @(
IF %%f == for set num=%%l
)
echo %num:;=%
где я пишу заменить, он использует replace.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
добавить еще одну строку после строки ..., которая была у меня на мгновение, пока я не нашел; нужно было сбежать! пакетные файлы не очень
Файл, с которым вы хотите работать
Файл bat, который вы запустите, в этом случае - a2.bat. но ты можешь назвать это как хочешь
как вы можете видеть, он читает aa и вносит в него поправки, добавляя строку после указанной вами строки.
Вы также можете запустить a3.bat, чтобы сделать то же самое, что и a3.bat a3.bat выглядит немного лучше, потому что это то место, где я понял, что все еще могу заставить его работать без полного взрыва, избегая многих вещей, так что a3.bat немного но выглядит менее уродливо, чем a2.bat, но они делают то же самое.
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-файл, который добавляет строку, работает неразрушающе. Так что все равно. Если вы хотите изменить aa, вы можете сделать C:\blah>a2 >b.b<ENTER>
C:\blah>copy b.b a.a<ENTER>
чтобы вывести результаты пакетного файла в новый файл, а затем скопировать его в aa
Вот еще одна версия командного файла, который также работает .. на этот раз, хотя я делаю копию
a3.bat и a2.bat дают одинаковый результат.
и для копирования я использовал copy /y, чтобы он не просил перезаписать файл.
таким образом, запуск a2> bb или a3> bb означает, что результаты переходят в bb. Затем скопируйте /t bb aa, и он перезапишет исходный файл aa.
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> bb. Как они дают одинаковый выход.
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>
- теперь вы видите, что aa изменилось, чтобы включить дополнительную строку
C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}
C:\blah>