这将把文本添加my_new_text
为所有 .txt 文件的最后一行:
FOR /F "tokens=*" %%G IN ('dir /b *.txt') DO echo my_new_text>> "%%G"
是否可以对此命令进行简单的编辑,以使其添加my_new_text
为第一行在文件中?
如果我能做到这一点,那么我就可以添加我需要的行(以相反的顺序)。
我尝试过诸如放置<<
之类的操作,>>
但这就是我的能力极限了!
我不确定 echo 是否具有这个功能?
我想在 PowerShell 中会更简单,但我想在同一个批处理文件中运行该命令。
尝试使用 PowerShell 使用包含以下行的现有文件:
我确实尝试过使用已创建的包含行的 txt 文件的 Powershell 命令,但是没有用。
我首先运行一组标准echo
命令来创建文件:
echo my_1st_line>> "temp_lines.abc"
echo my_2nd_line>> "temp_lines.abc"
echo my_3rd_line>> "temp_lines.abc"
(这些文件被称为“.abc”文件,因为它们不是称为 txt 文件,用于下一部分!)
然后我使用这个 PowerShell 命令尝试将内容添加temp_lines.abc
到所有 txt 文件的开头:
Powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "gci *.txt | ForEach-Object {(Add-Content $_) -Value (Get-Content 'temp_lines.abc') | Set-Content $_.FullName}"
这不起作用——PowerShell 不会在 txt 文件的开头添加任何内容。
如果仅使用 echo 就可以完成此操作,那就更好了,但我猜这又需要 PowerShell 吗?
答案1
是否可以对此命令进行简单的编辑,以使其添加
my_new_text
为第一行在文件中?
任何编程或脚本语言都无法将数据插入文件中,因为文件末尾的磁盘或磁带数据不会自动为您移动。您必须将数据复制到新文件或将其加载到内存中并将其保存为另一个文件。以下是 cmd 中的解决方案
FOR /F "tokens=*" %%G IN ('dir /b *.txt') DO (
> "%%G_tmp" echo my_new_text
>> "%%G_tmp" type "%%G"
del "%%G"
ren "%%G_tmp" "%%G"
)
如果你想插入这三行temp_lines.abc
my_1st_line
my_2nd_line
my_3rd_line
对所有 *.txt 文件执行类似操作
FOR /F "tokens=*" %%G IN ('dir /b *.txt') DO (
> "%%G_tmp" type temp_lines.abc
>> "%%G_tmp" type "%%G"
del "%%G"
ren "%%G_tmp" "%%G"
)
Add-Content
在 PowerShell 中显然行不通,因为它将内容附加到指定的项目或文件如果你读过它的手册页。由于我所说的原因,没有 PowerShell 可以将数据添加到文件前面。解决方案也是将数据复制到内存或另一个文件
ls *.txt |% { (gc temp_lines.abc, $_) | sc $_}
ls *.txt |% { $c = gc $_; cp temp_lines.abc $_; ac $_ $c }