2015-09-25 262 views
0

我有稱爲NonProd.txt每行包含一個服務器名稱的文本文件,即如何在FOR循環中替換字符串中的字符?

c123abc 
c234abc 
c345abc 
cfcd123 
etc. 

我也有一個批處理文件(以下給出),其讀取從文本文件中的每一行,提取3個字符從每一行,並將該值保存在變量中。然後我想用變量替換mypath變量中的XXX字符。

下面的代碼用於讀取文本文件,提取服務器名稱並提取它需要的3個字符,但是我無法使字符串替換工作,即用取出的3個字符替換XXX中的mypath

任何人都可以建議嗎?

@echo off 

SET mypath=C:\XXX\SYS\exe\folder\folder\ 

FOR /F %%X IN (NonProd.txt) DO (
    echo ServerName = %%X 
    Call Set "SID=%%X" 
    Call Set "SID=%%SID:~1,3%%" 
    Call Echo SID = %%SID%% 

    ECHO mypath = %mypath% 

    CALL set mypath=%mypath:XXX=%SID%% 

    ECHO newpath = %mypath% 
    ECHO. 
) 

@echo Completed. 
pause 
+0

您需要DelayedExpansion:'呼叫建立mypath中= %% mypath中:!XXX = SID %%'和'也叫ECHO NEWPATH = %% mypath中%%' – Aacini

+0

這也可以不DelayedExpansion(未經測試)工作= 'CALL CALL set mypath = %%%% mypath:XXX = %% SID %%%%%%'' – Aacini

回答

1

使用延遲擴展的代碼,如Aacini所示。

@echo off 
setlocal EnableDelayedExpansion 
set "mypath=C:\XXX\SYS\exe\folder\folder\" 

for /F %%X IN (NonProd.txt) do (
    echo ServerName = %%X 
    set "SID=%%X" 
    set "SID=!SID:~1,3!" 
    echo SID = !SID! 

    set newpath=%mypath:XXX=!SID!% 

    echo newpath = !newpath! 
    echo. 
) 

echo Completed. 
endlocal 
pause 

對於理解使用的命令以及它們如何工作,打開命令提示符窗口中,執行有下面的命令,並完全讀取顯示每個命令的所有幫助頁面非常謹慎。

  • for /?
  • if /?
  • set /?
  • setlocal /?

if /?包括在這個名單雖然IF代碼不被用作命令的幫助,如果解釋延遲Ë xpansion上的示例經常必須用於任何使用(定義的塊... )

2

我不明白你爲什麼用call而不是enabledelayedexpansion。無論如何,請參閱以下的代碼:

@echo off 
cls 
setlocal 
(
echo c123abc 
echo c234abc 
echo c345abc 
echo cfcd123 
)>%temp%\_file.tmp 

set mypath=c:\xxx\sys\exe\folder\folder\ 
echo: 
setlocal enabledelayedexpansion 
for /f "delims=" %%a in (%temp%\_file.tmp) do (
    set "sid=%%a" 
    rem :: set "sid=!sid:~1,3!" 
    set mypath=%mypath:xxx=!sid:~1,3!% 
    echo sid: !sid!, servername: !sid:~1,3!, newpath: !mypath! 
) 
endlocal 
echo Completed. 
exit /b 0 

輸出:

SID:c123abc,服務器名稱:123,NEWPATH:C:\ 123 \ SYS \ EXE \文件夾\文件夾\
SID:c234abc ,servername:234,newpath:c:\ 234 \ sys \ exe \ folder \ folder \
sid:c345abc,servername:345,newpath:c:\ 345 \ sys \ exe \ folder \ folder \
sid:cfcd123 ,servername:fcd,newpath:c:\ fcd \ sys \ exe \ folder \ folder \
已完成。