.bat替换for循环中的char

时间:2013-09-25 15:48:57

标签: windows batch-file replace

我需要遍历一个文本文件列表,并重写它们在第一行中插入一部分名称,如:

原始文件名:101f.htm

原始文件内容:

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

我用这个.bat脚本实现了一些结果:

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”

提前致谢!

2 个答案:

答案 0 :(得分: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%个变量,您必须使用{ {1}}和delayed expansion个变量(!)。

答案 1 :(得分: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%
)