Batch file 将文本替换为用户输入文本,多行
我在一个批处理文件中编写了一些代码,我已经设置好了,这样你就可以将文本拖放到批处理文件中,并使用一个名为“header.TXT”的document将其添加到.TXT文档的顶部,如下所示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
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
的当前日期的命令行的说明,请参阅上的答案%APPDATA%\Microsoft\Windows\SendTo
(在Windows文件资源管理器的地址栏中输入此字符串,然后单击“返回”打开此文件夹)。然后,可以在Windows文件资源管理器中选择多个文件,右键单击其中一个文件以打开关联菜单,并在快捷方式文件名的子菜单中单击鼠标左键“发送到”,在Windows文件资源管理器中当前选择的所有文件上插入相同的标题,但选择的文件不太多(命令行长度限制)呼叫/?
cls/?
color/?
复制/?
del/?
echo/?
endlocal/?
获取/?
goto/?
如果/?
移动/?
暂停/?
rem/?
robocopy/?
设置/?
setlocal/?
- DosTips论坛主题:
- Microsoft文档关于
(
没有结束对应的)
。@Stephan谢谢,我会解决这个问题,我运行了代码,它给了我一个错误:“指定的目录不存在“您可能想要forfiles/m
,而不是forfiles/p
谢谢您这工作非常好,我能够使用您提供的代码和资源将用户提示应用到需要用户输入的标题的每个部分。我将阅读您留下的更多链接,因为我需要了解有关批处理的更多信息。