2016-04-08 2 views
0

Я застрял здесь. поэтому для моего окончательного проекта я хочу изменить нашу процедуру настройки новых систем клиентов. Если быть точным - начните партию, которая сделает для вас «все». Сначала вы должны назвать некоторые вещи, которые будут необходимы позже что-то вроде:BATCH - открыть файл, изменить строки/слова и сохранить как * .xml

:NameNAMESPACE 
echo Whats the Namespace? 
set /p NAMESPACE=Name Namespace: 
echo Is %NAMESPACE% correct? (Y)es/(N)o 
set /P p=Please choose: 
if /i "%wahl%"=="Y" goto:CreateFolder 
if /i "%wahl%"=="N" goto:NameNAMESPACE 
echo Wrong choise! 
goto:NameNAMESPACE 

:NameHOSTNAME 
echo Whats the Hostname? 
set /p HOSTNAME=Name Hostname: 
echo Ist %HOSTNAME% correct? (Y)es/(N)o 
set /P wahl=Please choose: 
if /i "%wahl%"=="Y" goto:CreateFolder 
if /i "%wahl%"=="N" goto:NameHOSTNAME 
echo Wrong choise! 
goto:NameHOSTNAME 

я, что вы получите его :)
Проблема заключается в том, в какой-то момент мне нужно отредактировать файл * .xml (может быть текстовый файл на первый, но должны быть сохранены в виде XML) В этом файле выглядит следующим образом

<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <!--Connection--> 
    <add name="V4H_CONNECTIONINFO" value="Server=HOSTNAME;ServicePort=IISPort;ConnectionPort=1972;Namespace=NAMESPACE;ServiceUser=LicenseSlot_0;ServicePassword=!cgm!;Customer=SYS"/> 
    <!--URLs--> 
    <add name="V4H_URL_CLICKONCE" value="http://HOSTNAME:8010/v4h.Downloader.application"/> 
    <add name="V4H_URL_CHANNEL" value="http://HOSTNAME:IISPort"/> 
    <add name="V4H_URL_SERVICES" value="http://HOSTNAME:IISPort/Services/ChannelServices.asmx"/> 
    <add name="V4H_URL_SILVERLIGHT" value="http://HOSTNAME:IISPort/?ConnectionInfo={0}"/> 
    <!--ASP.NET--> 
    <add name="V4H_DBCONNECTION_CHANNEL" value="HOSTNAME,1972,NAMESPACE,ChannelServices_{12:0-5},!cgm!,Pooling=false"/> 
    <add name="V4H_DEBUGMODE_CHANNEL" value="false"/> 
</root> 

параметры, установленные ранее, должны быть изменены (имя хоста, пространство имен и портов) и сохранены как hostname_namespace. xml

я уже пытался получить некоторые их работы здесь click

или здесь click

мне удалось получить эту работу, но только изменить один параметр

@echo off &setlocal 
set NAMESPACE=TEST_CH_L 

set "search=NAMESPACE" 
set "replace=%NAMESPACE%" 


set "textfile=test.txt" 
set "newfile=Output.txt" 
(for /f "delims=" %%i in (%textfile%) do (
    set "line=%%i" 
    setlocal enabledelayedexpansion 
    set "line=!line:%search%=%replace%!" 
    echo(!line! 
    endlocal 
))>"%newfile%" 
del %textfile% 
rename %newfile% %textfile% 
echo Done 
pause 

So я надеюсь, что один из вас может мне помочь и извините за сообщение loooog

спасибо в заранее Макс

+0

Пакетные файлы являются примитивными и архаичными. Они предназначены для использования только для выполнения других программ. Вам понадобится программа, которая сделает то, что вам нужно, по крайней мере, части. VBScript и JavaScript могут делать все, что может сделать пакетный файл плюс больше. – user34660

ответ

0
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q36505840.txt" 
SET "outfile=%destdir%\outfile.txt" 

set "NAMESPACE=TEST_CH_L" 
SET "hostname=my_host" 
SET "port=starboard" 

REM set "textfile=test.txt" 
REM set "newfile=Output.txt" 
(
for /f "usebackqdelims=" %%i in ("%filename1%") do (
set "line=%%i" 
CALL :CHANGE namespace HOSTNAME port 
) 
)>"%outfile%" 

REM del %textfile% 
REM rename %newfile% %textfile% 
echo Done 

GOTO :EOF 

:CHANGE 
set "search=%1" 
IF NOT DEFINED search GOTO output 
FOR /f "tokens=1*delims==" %%n IN ('set %search%') DO IF /i "%%n"=="%search%" SET "replace=%%o" 
CALL set "line=%%line:%search%=%replace%%%" 
SHIFT 
GOTO CHANGE 

:output 
FOR /f "tokens=1*delims==" %%n IN ('set line') DO IF /i "%%n"=="line" ECHO(%%o 
GOTO :EOF 

Вам потребуется изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами.

Я использовал файл с именем q36505840.txt, содержащий ваши данные для моего тестирования.

Производит файл, определенный в% выходной_файле%

я оставил, но rem медиану некоторые из исходного кода & установленных фиксированных значений для трех переменных namespacehostname и port.

Обратите внимание, что пакетная замена нечувствительна к регистру, поэтому я бы изменил переменные имена и исправлю исходный файл.

Нет больших сюрпризов - просто заменить имена, указанные аргументы в :CHANGE

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