2013-09-25 104 views
0

我需要遍歷的文本文件的列表,並重寫他們將自己的名字的一部分,在第一線之一,如:.BAT在替換字符for循環

原始文件名:101F熱媒

原始文件內容:

Line1 
Line2 
. 
. 
LineN 

新的文件名:101f_.htm

新文件內容:

<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
</head> 
<tr> 
Paciente Matricula: 101 
</tr> 

Line1 
Line2 
. 
. 
LineN 

我取得了一些結果與此蝙蝠腳本:

set NOME=%%~ni_.xls 
set MTR=%%~ni 
for /R c:\teste\teste %%i IN (*.htm) DO (
ECHO.^<head^> > %NOME% 
ECHO.^<meta http-equiv^="Content-Type" content^="text/html;charset=utf-8"^> >> %NOME% 
ECHO.^</head^> >> %NOME% 
ECHO.^<tr^> >> %NOME% 
ECHO.Paciente Matricula: %MTR% >> %NOME% 
ECHO.^</tr^> >> %NOME% 
ECHO. >> %NOME% 
type %%~nxi >> %NOME% 
PAUSE 
) 

它給了我所有我需要的,除由行:

「Paciente Matricula:101F」

我需要刪除「f」到行顯示如:

「Paciente Matricula:101」

提前致謝!

回答

3

試試這個代碼示例:

@echo on &setlocal 
for /R "c:\teste\teste" %%i IN (*f.htm) DO (
    (
    set "NOME=%%~ni_.xls" 
    set "MTR=%%~ni" 
    setlocal enabledelayedexpansion 
    ECHO(^<head^> 
    ECHO(^<meta http-equiv="Content-Type" content="text/html;charset=utf-8"^> 
    ECHO(^</head^> 
    ECHO(^<tr^> 
    ECHO(Paciente Matricula: !MTR:~0,-1! 
    ECHO(^</tr^> 
    ECHO(
    type "%%~nxi" 
    )>"!NOME!" 
    endlocal 
) 

內部代碼塊(從第一個到最後一個括號中的for循環),您將無法訪問%變量與變更值(%NOME%),在那裏,你必須使用delayed expansion!變量(!NOME!)。

+0

使用setlocal enabledelayedexpansion和!MTR!解決了問題! –

0

基於Endoro的回答,請使用以下替代語法的工作原理:

set MTR=%%~ni 
set MTR=!MTR:f=! 

我用這個sintax因爲我不能同意的「F」字將是最後一個,它可以跟一個空間。

下面的腳本適用於該任務。

setlocal ENABLEDELAYEDEXPANSION 
set NOME=%%~ni_.xls 
for /R c:\teste\teste %%i IN (*.htm) DO (
set MTR=%%~ni 
set MTR=!MTR:f=! 
ECHO.^<head^> > %NOME% 
ECHO.^<meta http-equiv^="Content-Type" content^="text/html;charset=utf-8"^> >> %NOME% 
ECHO.^</head^> >> %NOME% 
ECHO.^<tr^> >> %NOME% 
ECHO.Paciente Matricula: !MTR! >> %NOME% 
ECHO.^</tr^> >> %NOME% 
ECHO. >> %NOME% 
type %%~nxi >> %NOME% 
) 
+0

你應該使用Endoro的方式來爲輸出使用一個塊並且只將整個塊重定向一次到一個文件,因爲你的方式會在每行添加一個空格 – jeb