2016-04-08 58 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 

所以我希望你们中的一位能够帮助我,并为loooog发帖而感到抱歉

thanks in推进 最大

+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 

你需要改变的sourcedirdestdir设置以适合你的情况。

我使用了一个名为q36505840.txt的文件,其中包含我的测试数据。

主要生产定义为%OUTFILE%

我已经离开了,但rem MED-出你的一些原代码&建立固定值的三个变量namespacehostnameport文件。

请注意批量替换不区分大小写,所以我会更改变量名称并修复您的源文件以适应。

没有一个伟大的惊喜 - 只需更换由参数指定的名称:CHANGE