0

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

原始文件名: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”

提前致谢!

4

2 回答 2

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!)。

于 2013-09-25T17:47:26.827 回答
0

根据 Endoro 的回答,使用以下替换语法有效:

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

我使用这个语法是因为我不能授予“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%
)
于 2013-09-25T19:15:08.200 回答