2013-12-20 3 views
0

Привет, У меня есть этот код, чтобы заменить путь, а затем запустите iexpress для сборки exe.Строка подстановки, но целая строка не скопирована

@echo off 
set PATH=PATH 
set FOLDER=FOLDER 
set NEWPATH=%~dp0 
set TARGET=%NEWPATH%install_32bitWindows.EXE 
echo %TARGET% 
setlocal enabledelayedexpansion 
for /f "tokens=2*" %%i in (install_32bitWindows.SED) do (
    set str=%%i 
    echo %str% 
    set str=!str:%PATH%=%TARGET%! 
    set str=!str:%FOLDER%=%NEWPATH%! 
    echo !str! >> newfile 
) 
del install_32bitWindows.SED 
rename newfile install_32bitWindows.SED 
C:/Windows/SysWOW64/iexpress.exe /N %~dp0install_32bitWindows.SED 

Замещение сделано правильно, но моя проблема заключается в том, что одна из линий пространство в нем, и все после того, как пространство не копируется как таковой:

Первоначально

AppLaunched=c:\windows\system32\cscript.exe "install_32bitWindows.vbs" 

После сценария:

AppLaunched=c:\windows\system32\cscript.exe 

Почему остальная часть линии удаляется? Thanks

+0

Можете ли вы дать фрагмент вашего файла 'install_32bitWindows.SED'. – SachaDee

+0

С '" tokens = 2 * "' он разбивает строки из файла, но мы не знаем, что находится в файле. Чтобы взять всю строку, используйте '' delims = "' вместо этого. – foxidrive

ответ

0

Потому что все токены после второго объединены в подразумеваемую переменную %%j, с которой вы не имеете в виду нигде.

Я не уверен, что корректная обработка будет, но это должно указать вам правильное направление:

>> newfile echo !str! %%j 

Я переместил Перенаправление к началу команды, так что пространство перед тем >> не вводится ложно в выходной файл. Маленький материал, но почему бы не быть точным?

0

В отсутствие данных выборки это становится немного угадающей игрой.

Если предположить, что ваши оригинальные ... SED filecontains линии

string=anotherstring 

и вы хотите заменить разные для определенных фиксированных строк в этом файле, то

for /f "tokens=1*delims==" %%i in (install_32bitWindows.SED) do (
set str=%%j 

(Примечание: 1* и %%j

следует работать НО ...

Вы, кажется, заменяете вновь созданный файл для оригинала, но новый файл не запускается string=, потому что вы не выводите эту часть. Если вы хотите string=newstring то

echo %%i=!str! >> newfile 

Наконец, это очень плохая идея использовать PATH как пользовательский переменной в пакете. PATH содержит список каталогов, разделенных точкой с запятой, которые пакет использует для поиска исполняемых файлов, если исполняемый файл не существует в текущем каталоге. Вы меняете его, и партия быстро получит амнезию. То же самое касается temp и tmp (укажите во временную директорию) и несколько других «зарезервированных» имен ...

Смежные вопросы