Ten plik vbscript, który podasz w swoim pytaniu, działa
Można powiedzieć set /p yyy=input number:
lub% ID%, jak masz.
Poniżej zmieniam i & lt; = 4 na i & lt; =% rrr%
yyy = 44, więc staje się i & lt; = 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>
Zrób więc plik bat z dwiema liniami.
Jeden z set / p ... i jeden z linią zastąpienia.
Albo tylko jedna linia
C:\blah>set /p ggg= & replace a.a var trt
(zastąpi tekst var, tekstem trt)
Oto replace.vbs, z którym się łączysz. Widzę, że działa nawet bez wywoływania go za pomocą cscript. (testowany w 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>
AKTUALIZACJA-
tutaj jest metoda, która po prostu przepisuje tę dla linii
@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++^)
)
)
AKTUALIZACJA 2-
ale jak na znalezienie identyfikatora
Czyni to FIND-
Spogląda na linem, aby go rozdzielić (Tokeny to), używając obraźliwego pliku cmd.exe dla instrukcji. W tym przypadku użyłem spacji jako ogranicznika (choć można to poprawić). Może wtedy znaleźć numer, ale znajdzie numer, po którym następuje średnik. Ostatnia linia zastępuje średnik niczym, tzn. Usuwa zbłąkany średnik.
@ECHO OFF
for /f "tokens=1-12" %%f in (a.a) do @(
IF %%f == for set num=%%l
)
echo %num:;=%
gdzie piszę zastępuje to używając 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>
AKTUALIZACJA 3
aby dodać kolejną linię po linii ... która miała mnie na chwilę, dopóki nie znalazłem; trzeba uciekać! pliki wsadowe nie są ładne
Plik, z którym chcesz pracować, to a.a
Plik bat, który uruchomisz, to w tym przypadku a2.bat. ale możesz nazwać to, co chcesz
jak widzisz, czyta a.a i zmienia to dodając linię po linii, o której wspomniałeś.
możesz również uruchomić a3.bat, aby zrobić to samo, co a3.bat a3.bat wygląda nieco lepiej, ponieważ zdałem sobie sprawę, że nadal mogę go uruchomić, nie przepuszczając wielu rzeczy, więc a3.bat jest trochę ale mniej brzydkie niż a2.bat, ale robią to samo.
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>
Powinienem zaznaczyć, że plik nietoperza, który dodaje linię, działa nieniszcząco. Tak więc a.a jest nadal taki sam. Jeśli chcesz, aby a.a została zmieniona, możesz to zrobić C:\blah>a2 >b.b<ENTER>
C:\blah>copy b.b a.a<ENTER>
wyprowadzić wyniki pliku wsadowego do nowego pliku, a następnie skopiować go na a.a.
Oto kolejna wersja pliku wsadowego, który również działa .. tym razem, chociaż robię kopię
a3.bat i a2.bat dają ten sam wynik.
i dla kopii użyłem kopii / y, aby nie prosić o zastąpienie pliku.
więc uruchamianie a2> b.b lub a3> b.b oznacza, że wyniki przechodzą do b.b Następnie skopiuj / t b.b a.a i zastąpi oryginalny plik 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");
}
-
żeby pokazać, że a2 działa tak samo
C:\crp>a2
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}
-
można to zrobić również za pomocą a3> b.b. Ponieważ dają ten sam wynik.
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>
-
teraz widzisz, że a.a zmieniła się, aby dodać dodatkową linię
C:\blah>type a.a
var i;
for (i = 1; i <= 20; i++)
{
iimSet("loop", i);
iimPlay("ABC.iim");
iimPlay("DEF.iim");
}
C:\blah>