Esse arquivo vbscript que você dá em sua pergunta funciona
Você pode dizer set /p yyy=input number:
ou% ID% como você fez.
Abaixo eu altero i < = 4, para i < =% yyy%
yyy = 44, então se torna i < = 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>
Portanto, basta criar um arquivo bat com duas linhas. Um com set / p ... e um com a linha de substituição.
Ou apenas uma linha
C:\blah>set /p ggg= & replace a.a var trt
(irá substituir o texto var, com o texto trt)
Aqui está o replace.vbs ao qual você se conectou. Eu vejo que ele executa mesmo sem invocá-lo com cscript. (testado no 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>
UPDATE -
aqui é um método que apenas reescreve aquele para a linha
@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++^)
)
)
UPDATE 2 -
mas como para encontrar o id
Isso faz com que o FIND- ele olha para o linem que o divide (o Tokenises) usando o cmd.exe ofensivo para a declaração. Neste caso, usei apenas espaço como delimitador (embora isso possa ser melhorado). Pode então encontrar o número, mas ele encontra o número seguido por um ponto e vírgula. A última linha substitui o ponto-e-vírgula por nada, ou seja, remove o ponto e vírgula perdido.
@ECHO OFF
for /f "tokens=1-12" %%f in (a.a) do @(
IF %%f == for set num=%%l
)
echo %num:;=%
onde escrevo substituo o uso de 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>
UPDATE 3
para adicionar outra linha depois de uma linha .. que me teve por um momento até que eu encontrei o; precisava ser escapado! arquivos em lote não são bonitos
O arquivo com o qual você deseja trabalhar é a.a
O arquivo bat que você vai rodar é a2.bat neste caso. mas você pode nomear o que quiser
como você pode ver, ele lê a.a e altera a adição de uma linha após a linha que você mencionou.
você também pode executar o a3.bat para fazer o mesmo que a3.bat O a3.bat parece um pouco mais simples porque é onde eu percebi que ainda poderia fazê-lo funcionar sem explodir ao máximo escapando de muita coisa, então a3.bat é um pouco menos feio do que a2.bat, mas eles fazem a mesma coisa.
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>
Devo salientar que o arquivo bat que adiciona uma linha funciona de forma não destrutiva. Então a.a ainda é o mesmo. Se você quisesse que a.a fosse alterado, você poderia fazer C:\blah>a2 >b.b<ENTER>
C:\blah>copy b.b a.a<ENTER>
para enviar os resultados do arquivo em lote para um novo arquivo e copiá-lo para a.a.
Aqui está outra versão do arquivo de lote que também funciona ... desta vez eu copio
a3.bat e a2.bat fornecem o mesmo resultado.
e para a cópia, eu usei o copy / y, para que ele não pedisse para sobrescrever o arquivo.
então rodando a2 > b.b ou a3 > b.b significa que os resultados vão para b.b Então copie / t b.b a.a e ele sobrescreve o arquivo original a.a
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");
}
só para mostrar que a2 funciona da mesma forma
C:\crp>a2
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}
-
isso poderia ter sido feito com a3 & bt; b.b também. Como eles dão o mesmo resultado.
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>
agora você vê a.a mudou para incluir a linha adicional
C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}
C:\blah>