我需要遍历一个文本文件列表,并重写它们在第一行中插入一部分名称,如:
原始文件名: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”
提前致谢!
答案 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%
)