用用户输入的文本替换文本,多行

问题描述 投票:0回答:1

我在批处理文件中编写了一些代码,我已经设置了它,以便您将文本拖放到批处理文件中,并使用名为的文档将标题添加到 .TXT 文档的顶部“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:\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

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

batch-file text user-input edit
1个回答
1
投票

Windows 命令处理器

cmd.exe
专为运行命令和可执行文件而设计。它不是为修改文本文件而设计的,例如搜索和替换文本文件中的某些内容。
请参阅如何使用 Windows 命令行环境查找和替换文件中的文本?

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

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

@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

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

  1. 它通过处理环境变量
    CMDCMDLINE
    的值来查明 Windows 命令处理器
    cmd.exe
    是否使用选项
    /C
    启动或
    /c
    在执行批处理文件后自动关闭。在这种情况下,定义了环境变量
    AutomaticClose
    ,这会导致用户通过 Windows shell(桌面、开始菜单、任务栏)或 Windows 文件资源管理器(或任何其他文件管理器)双击来运行批处理文件,而无需使用其他命令或者将一个或多个文件拖放到批处理文件上(或运行批处理文件的快捷方式)。否则,批处理文件将从命令提示符窗口中启动,或者使用选项
    /K
    /k
    启动,以在完成批处理文件处理后保持命令进程运行。请参阅调试批处理文件为什么批处理文件编码专家在开发过程中从命令提示符窗口运行批处理文件。
  2. 它可以在以多个文件名启动时处理多个文件。还可以运行带有通配符模式的批处理文件来处理文件夹中与通配符模式匹配的所有文件。
  3. 它输出关于不带参数启动的使用信息(或者第一个参数只是一个空参数字符串
    ""
    )或以
    /?
    作为第一个参数。
  4. 它预定义了环境变量
    InputDate
    以及国际日期格式的当前日期
    yyyy-MM-dd
    (可以在代码中轻松更改日期格式),以便批处理文件的用户只需点击RETURNENTER即可使用当前日期。有关用于获取格式为
    yyyy-MM-dd
    的当前日期的命令行的说明,请参阅午夜后时间设置不正确的答案。
  5. 可以右键单击批处理文件,在子菜单中打开的上下文菜单中左键单击发送到菜单项桌面(创建快捷方式),使用Ctrl+X剪切在Windows桌面上创建的快捷方式文件,然后使用 Ctrl+V 将快捷方式文件粘贴到文件夹
    %APPDATA%\Microsoft\Windows\SendTo
    中(在 Windows 文件资源管理器的地址栏中输入此字符串,然后按 RETURN 打开此文件夹)。然后可以在 Windows 文件资源管理器中选择多个文件,右键单击所选文件之一以打开上下文菜单,然后在子菜单中左键单击“发送到”快捷方式文件的名称,以在所有文件上插入相同的标头当前在 Windows 文件资源管理器中选择的文件没有太多(命令行长度限制)。
  6. 要了解所使用的命令及其工作原理,请打开
命令提示符

窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

    call /?
  • cls /?
  • color /?
  • copy /?
  • del /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • move /?
  • pause /?
  • rem /?
  • robocopy /?
  • set /?
  • setlocal /?
  • 
    
  • 另请参阅:

DosTips 论坛主题:
    ECHO。无法给出文本或空行 - 而是使用 ECHO/
  • 有关
  • 使用命令重定向运算符
  • 的 Microsoft 文档
  • 使用 Windows 批处理文件的单行多个命令
© www.soinside.com 2019 - 2024. All rights reserved.