将文本替换为多行用户输入文本



我在批处理文件中编写了一些代码,我已经设置好了,可以将文本拖放到批处理文件上,它使用名为";Header.txt";显示在下方

Date: _DATE_
Time: _TIME_
Job ID: _ID_
Plant: _PLANT_
Code: _CODE_
Program: _PROGRAM_
Hand: _HAND_
Group: _GROUP_
LABEL                                 X-POS      Y-POS       Z-POS     X-CHK      Y-CHK     Z-CHK                                           I         J          K         +TOL       -TOL
===========================================================================================================================================================================================

如何替换文档中的文本?下面是我的尝试:

@if not "%~1" == "" copy /B "C:UsersdougjDesktopNew folderHEADER.TXT"+"%~1" "%~1.tmp" >nul & move /Y "%~1.tmp" "%~1"
GOTO  :USERINPUT
CLS
:USERINPUT
COLOR 7C 

SET /p _INPUTNAME= Please Input DATE:


FOR /F "delims=" %%G IN (
'FORFILES /P "%~1" /C "cmd /c echo @path"'
) DO (
for /f "delims=" %%H in ('type "%%~G" ^& break ^> "%%~G" ') do (
set "line=%%H"
setlocal enabledelayedexpansion
>>"%%~G" echo(!line:_DATE_=%_INPUTNAME%
endlocal
)
)
pause
cls

GOTO :Finish
:Finish
CLS
COLOR E3
Echo.
Echo.
ECHO              FINISHED!
Echo       Press any key to exit...
Echo.
Echo.
Pause
CLS
EXIT

我运行了代码,它给了我一个错误:";指定的目录不存在。

Windows命令处理器cmd.exe是为运行命令和可执行文件而设计的。它不是为修改文本文件而设计的,就像在文本文件中搜索和替换一样
请参阅如何使用Windows命令行环境查找和替换文件中的文本?

对于具有已知标题内容的任务,可以更容易地手动创建具有用户输入日期的标题文件,然后将刚刚创建的标题文件和指定的文件一起复制到临时文件,并用顶部插入标题的临时文件替换原始文件,最后删除创建的标题。

此任务的批处理文件代码:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "AutomaticClose="
setlocal EnableDelayedExpansion
for %%I in (!CMDCMDLINE!) do if /I "%%~I" == "/C" endlocal & set "AutomaticClose=1" & goto CheckArguments
endlocal
:CheckArguments
if "%~1" == "" goto ShowUsageHelp
if "%~1" == "/?" goto ShowUsageHelp
set "TempHeaderFile=%TEMP%%~n0.tmp"
color 7C
echo(
for /F "tokens=1-3 delims=/: " %%I in ('%SystemRoot%System32robocopy.exe "%SystemDrive%|" . /NJH') do set "DefaultDate=%%I-%%J-%%K" & goto UserPromptDate
:UserPromptDate
set "InputDate=%DefaultDate%"
set /P "InputDate=Please input date (default: %InputDate%): "
rem Remove all double quotes from input string.
set "InputDate=%InputDate:"=%"
rem Has the user not input anything else than double quotes?
if not defined InputDate goto UserPromptDate
color
setlocal EnableDelayedExpansion
(
echo Date: !InputDate!
echo Time: _TIME_
echo Job ID: _JOBID_
echo Plant: _PLANT_
echo Code: _CODE_
echo Program: _PROGRAM_
echo Hand: _HAND_
echo Group: _GROUP_
echo(
echo LABEL                     X-POS  Y-POS      Z-POS     X-CHK       Y-CHK      Z-CHK                                           I         J         K          +TOL      -TOL
echo ===========================================================================================================================================================================================
)>"%TempHeaderFile%"
endlocal
for %%I in (%*) do (
copy /B "%TempHeaderFile%"+"%%~I" "%%~I.tmp" >nul
if exist "%%~I.tmp" move /Y "%%~I.tmp" "%%~I"
if exist "%%~I.tmp" del "%%~I.tmp"
)
del "%TempHeaderFile%"
if defined AutomaticClose cls & color E3
echo(
echo(
echo              FINISHED!
if defined AutomaticClose echo       Press any key to exit...
echo(
if defined AutomaticClose pause >nul & color
goto EndBatch
:ShowUsageHelp
if defined AutomaticClose color 7C
echo(
echo Usage: %~n0 "[PATH]Document File Name 1" ["[PATH]Document File Name 2"] ...
echo(
if defined AutomaticClose pause
:EndBatch
endlocal

这个批处理文件有一些额外的增强功能:

  1. 它通过处理环境变量CMDCMDLINE的值来确定Windows命令处理器cmd.exe是用选项/C/c启动的,以在执行批处理文件后自动关闭。在这种情况下,定义了环境变量AutomaticClose,从而为用户使用额外的命令,从Windows外壳(桌面、开始菜单、任务栏(或Windows文件资源管理器(或任何其他文件管理器(双击运行批处理文件,而无需或只需在批处理文件上拖放一个或多个文件(或运行批处理的快捷方式(。否则,批处理文件将从命令提示符窗口内启动,或使用选项/K/k启动,以在完成批处理文件的处理后保持命令进程运行。请参阅调试批处理文件为什么批处理文件编码专家在命令提示符窗口中运行开发中的批处理文件
  2. 它可以在使用多个文件名启动时处理多个文件。也可以使用通配符模式运行批处理文件,以处理文件夹中与通配符模式匹配的所有文件
  3. 它输出关于在没有参数(或第一个参数只是空参数字符串""(或以/?作为第一个参数的情况下启动的用法信息
  4. 它以国际日期格式yyyy-MM-dd(日期格式可以在代码中轻松更改(预先定义了具有当前日期的环境变量InputDate,以便批处理文件的用户只需点击RETURNENTER
  5. 可以右键单击批处理文件,在菜单项桌面上的子菜单发送到中打开的上下文菜单中左键单击(创建快捷方式(,用Ctrl+X剪切在Windows桌面上创建的快捷方式文件,并用Ctrl+VETURN打开此文件夹(。然后,可以在Windows文件资源管理器中选择多个文件,右键单击其中一个选定的文件以打开上下文菜单,然后在子菜单发送到中的快捷方式文件名上左键单击,以在Windows文件资源管理器中当前选定的所有文件上插入相同的标题,但选定的文件不多(命令行长度限制(

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并完整仔细地阅读每个命令显示的帮助页。

  • call /?
  • cls /?
  • color /?
  • copy /?
  • del /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • move /?
  • pause /?
  • rem /?
  • robocopy /?
  • set /?
  • setlocal /?

另请参阅:

  • DosTips论坛主题:ECHO。未能给出文本或空行-请使用ECHO/
  • 关于使用命令重定向运算符的Microsoft文档
  • 使用Windows批处理文件的单行多个命令

最新更新