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

Batch file 将文本替换为用户输入文本,多行,batch-file,text,user-input,edit,Batch File,Text,User Input,Edit,我在一个批处理文件中编写了一些代码,我已经设置好了,这样你就可以将文本拖放到批处理文件中,并使用一个名为“header.TXT”的document将其添加到.TXT文档的顶部,如下所示 Date: _DATE_ Time: _TIME_ Job ID: _ID_ Plant: _PLANT_ Code: _CODE_ Program: _PROGRAM_ Hand: _HAND_ Group: _GROUP_ LABEL X-PO

我在一个批处理文件中编写了一些代码,我已经设置好了,这样你就可以将文本拖放到批处理文件中,并使用一个名为“header.TXT”的document将其添加到.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:\Users\dougj\Desktop\New folder\HEADER.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
是为运行命令和可执行文件而设计的。它不是为修改文本文件而设计的,比如搜索和替换文本文件中的某些内容。

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

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

@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%\System32\robocopy.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
此批处理文件具有一些其他增强功能:

  • 它通过处理环境变量
    cmdline
    的值来确定Windows命令处理器
    cmd.exe
    是否使用选项
    /C
    /C
    启动,以在执行批处理文件后自动关闭。在这种情况下,定义了环境变量
    AutomaticClose
    ,从而得出结果在Windows shell(桌面、开始菜单、任务栏)或Windows文件资源管理器(或任何其他文件管理器)中双击运行批处理文件的用户使用其他命令时,不需要或通过拖放批处理文件上的一个或多个文件(或运行批处理文件的快捷方式)。否则,批处理文件将在命令提示窗口内启动,或使用选项
    /K
    /K
    在批处理文件处理完成后保持命令进程运行。请参阅批处理文件编码专家为什么在命令提示窗口内运行开发中的批处理文件
  • 它可以在启动时使用多个文件名处理多个文件。还可以使用通配符模式运行批处理文件,以处理文件夹中与通配符模式匹配的所有文件
  • 它输出一个用法信息,说明在启动时没有参数(或者第一个参数只是一个空参数字符串
    “”
    ),或者第一个参数是
    /?
  • 它使用国际日期格式的当前日期预定义环境变量
    InputDate
    (日期格式可以在代码中轻松更改)因此,批处理文件的用户可以点击“返回”或“输入”来使用当前日期。有关用于获取格式为
    yyyy-MM-dd
    的当前日期的命令行的说明,请参阅上的答案
  • 可以在批处理文件上单击鼠标右键,在子菜单中打开的上下文菜单中单击鼠标左键,在菜单项桌面(创建快捷方式)上单击鼠标左键,使用Ctrl+X剪切在Windows桌面上创建的快捷方式文件,并使用Ctrl+V将快捷方式文件粘贴到文件夹
    %APPDATA%\Microsoft\Windows\SendTo
    (在Windows文件资源管理器的地址栏中输入此字符串,然后单击“返回”打开此文件夹)。然后,可以在Windows文件资源管理器中选择多个文件,右键单击其中一个文件以打开关联菜单,并在快捷方式文件名的子菜单中单击鼠标左键“发送到”
    ,在Windows文件资源管理器中当前选择的所有文件上插入相同的标题,但选择的文件不太多(命令行长度限制)
  • 要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

    • 呼叫/?
    • cls/?
    • color/?
    • 复制/?
    • del/?
    • echo/?
    • endlocal/?
    • 获取/?
    • goto/?
    • 如果/?
    • 移动/?
    • 暂停/?
    • rem/?
    • robocopy/?
    • 设置/?
    • setlocal/?
    另见:

    • DosTips论坛主题:
    • Microsoft文档关于

    使用DOS/Windows批处理,您只能覆盖或附加到文件,而不能插入。因此,您必须通过从原始文件复制至少一次,然后重写原始文件来伪造插入。重命名(帮助重命名)比复制文件快,然后将标题写入原始文件名,然后读取重命名的文件并将内容附加到新文件。不,请不要为新问题修改此问题。启动另一个线程。您有两个打开的命令块(左括号
    没有结束对应的
    。@Stephan谢谢,我会解决这个问题,我运行了代码,它给了我一个错误:“指定的目录不存在“您可能想要
    forfiles/m
    ,而不是
    forfiles/p
    谢谢您这工作非常好,我能够使用您提供的代码和资源将用户提示应用到需要用户输入的标题的每个部分。我将阅读您留下的更多链接,因为我需要了解有关批处理的更多信息。