我在批处理文件中编写了一些代码,我已经设置了它,以便您将文本拖放到批处理文件中,并使用名为的文档将标题添加到 .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
我运行了代码,它给了我一个错误:“指定的目录不存在。
Windows 命令处理器
cmd.exe
专为运行命令和可执行文件而设计。它不是为修改文本文件而设计的,例如搜索和替换文本文件中的某些内容。对于已知标头内容的此任务,更容易手动创建带有用户输入日期的标头文件,接下来将刚刚创建的标头文件和指定文件一起复制到临时文件并替换原始文件( 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
此批处理文件有一些额外的增强功能:
CMDCMDLINE
的值来查明 Windows 命令处理器 cmd.exe
是否使用选项 /C
启动或 /c
在执行批处理文件后自动关闭。在这种情况下,定义了环境变量 AutomaticClose
,这会导致用户通过 Windows shell(桌面、开始菜单、任务栏)或 Windows 文件资源管理器(或任何其他文件管理器)双击来运行批处理文件,而无需使用其他命令或者将一个或多个文件拖放到批处理文件上(或运行批处理文件的快捷方式)。否则,批处理文件将从命令提示符窗口中启动,或者使用选项 /K
或 /k
启动,以在完成批处理文件处理后保持命令进程运行。请参阅调试批处理文件为什么批处理文件编码专家在开发过程中从命令提示符窗口运行批处理文件。""
)或以 /?
作为第一个参数。InputDate
以及国际日期格式的当前日期yyyy-MM-dd
(可以在代码中轻松更改日期格式),以便批处理文件的用户只需点击RETURN或ENTER即可使用当前日期。有关用于获取格式为 yyyy-MM-dd
的当前日期的命令行的说明,请参阅午夜后时间设置不正确的答案。%APPDATA%\Microsoft\Windows\SendTo
中(在 Windows 文件资源管理器的地址栏中输入此字符串,然后按 RETURN 打开此文件夹)。然后可以在 Windows 文件资源管理器中选择多个文件,右键单击所选文件之一以打开上下文菜单,然后在子菜单中左键单击“发送到”快捷方式文件的名称,以在所有文件上插入相同的标头当前在 Windows 文件资源管理器中选择的文件没有太多(命令行长度限制)。
窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
call /?
cls /?
color /?
copy /?
del /?
echo /?
endlocal /?
for /?
goto /?
if /?
move /?
pause /?
rem /?
robocopy /?
set /?
setlocal /?
DosTips 论坛主题: