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