我有点棘手,时间紧迫。以下方面存在一些问题:
我有一个预先建立的txt文件。我需要运行几个通用的命令提示符,然后这些命令提示符将被添加到所述文件中预先存在的数据的ONTOP中,而不会被覆盖。此外,我需要在输出之前添加信息。例如,假设我在Windows7中使用以下两个命令:
tzutil /g
&
hostname
将输出:
US Mountain Standard Time
&
MyComputer
我需要将这两个输出添加到它们自己的行中,即文件中预先存在的数据的ONTOP中。这些基本上将被用作报头信息。我还需要在输出前添加标签,例如:
timezone:US Mountain Standard Time
hostname:MyComputer
ORIGINAL DATA NOT TO BE OVERWRITTEN
ORIGINAL DATA NOT TO BE OVERWRITTEN
ORIGINAL DATA NOT TO BE OVERWRITTEN
ORIGINAL DATA NOT TO BE OVERWRITTEN
只要能找到最实用的方法,我们将不胜感激。每当我尝试这样做时,我总是会遇到多个问题。
可能最简单的方法是以下命令行(cmd(:
(< nul set /P ="timezone:" & tzutil /G & echo/& < nul set /P ="hostname:" & hostname & more +2 "file.txt") > "file.txt.tmp"
move /Y "file.txt.tmp" "file.txt"
作为一个批处理文件,我会这样写:
(
< nul set /P ="timezone:" & rem // (write text without line-break at the end)
tzutil /G & rem // (write the time zone name)
echo/& rem // (append a line-break since `tzutil` does not)
< nul set /P ="hostname:" & rem // (write text without line-break at the end)
hostname & rem // (write the host name with trailing line-break)
more +2 "file.txt" & rem // (return file content except first two lines)
) > "file.txt.tmp" & rem // (redirect to a temporary file)
move /Y "file.txt.tmp" "file.txt" & rem // (move temporary file onto original one)
请注意,输入文件包含的行数必须少于64K,每行数必须短于64K个字符。
将页眉打印到一个新文件中,然后键入现有文件中页眉后面需要的内容。然后,您可以用旧文件的文件名对新文件进行REN,以获得您想要的结果。我不知道还有什么其他方法可以批量完成。
对于输出前面的标签,请尝试:
FOR /F %%A IN ('tzutil /g') DO ECHO timezone:%%A >> output.txt
这可以很容易地完成,我先写前两行,然后从当前文件中复制除前两行之外的所有内容。这将被写入一个临时文件,该文件将被移动到原始文件名。
将THEFILE的值更改为您的文件名。
===repheader.bat
@echo off
SETLOCAL
SET "THEFILE=C:srctcurrentfile.txt"
SET "TEMPFILE=%TEMP%repheader.tmp"
( FOR /F %%A IN ('TZUTIL /g') DO (ECHO timezone:%%~A)
FOR /F %%A IN ('hostname') DO (ECHO hostname:%%~A)
FOR /F "delims= skip=2" %%A IN ('TYPE "%THEFILE%"') DO (ECHO %%~A)
) >"%TEMPFILE%"
MOVE /Y "%TEMPFILE%" "%THEFILE%"
ENDLOCAL
EXIT /B 0
如果您真的想要一个powershell解决方案,这里有一个。。。[grin]
它的作用。。。
- 设置要使用的文件名
- 创建用于测试的文件
当您准备使用自己的测试文件时,删除或禁用整个#region/#endregion
块 - 获取时区、主机名和目标文件的内容
这不会显示tz偏移量或标准/夏令时状态 - 为3个值创建CCD_ 2;将这些值填入
- 修剪掉以某种方式添加的两行空行
- 将新内容发送到旧文件
这将覆盖原始内容。这让我很紧张。。。您可能需要添加一个备份步骤来保留原始步骤
代码。。。
$InFile = "$env:TEMPJonnyDavy_KeepOrignalLines.txt"
#region >>> create a test file
# when ready to do this for real, remove the entire "#region/#endregion" block
@'
1st line to keep.
Line to keep, the 2nd.
Third one.
Last to keep.
'@ | Set-Content -LiteralPath $InFile
#endregion >>> create a test file
$TimeZone = (Get-TimeZone).Id
$HostName = $env:COMPUTERNAME
$FileContent = Get-Content -LiteralPath $InFile -Raw
(@'
TimeZone : {0}
HostName : {1}
{2}
'@ -f $TimeZone, $HostName, $FileContent).Trim() |
Set-Content -LiteralPath $InFile
重写文件的内容。。。
TimeZone : Central Standard Time
HostName : [MySysName]
1st line to keep.
Line to keep, the 2nd.
Third one.
Last to keep.