本质上,我想从file.txt上阅读contents
苹果香蕉胡萝卜
并写入newfile.txt,以便它具有内容
苹果香蕉胡萝卜
我需要在没有安装权限的Windows计算机上执行此操作。
我尝试了
set row=
for /f %%x in (file.txt) do set row=%row% %%x
echo row > newfile.txt
我尝试使用PowerShell语句(我无法运行PowerShell脚本),而不是CMD风格的for
循环。
powershell -Command "(Gc file.txt) | Foreach-Object -Process {set row=%row% _$} | Out-File newFile.txt"
,但都产生一个空文件。有办法做到吗?
Get-Content
将文件的内容返回,作为一系列线路,已经删除了线路断裂,因此(在PowerShell中)要做的就是加入行并将结果写回。到文件:
(Get-Content 'input.txt') -join ' ' | Set-Content 'output.txt'
不建议使用,但是如果您必须在批处理中进行此操作,则需要类似的东西:
@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (file.txt) do set "row=!row! %%x"
>newfile.txt echo %row%
请注意,延迟的扩展是所需的才能正常工作。没有IT IT %row%
在循环主体中将在解析时间扩展(当变量仍然为空时),因此在循环完成后,您最终只能从变量中的输入文件中获得最后一行。启用了延迟的扩展(以及使用!row!
而不是%row%
),变量在运行时进行扩展,即在循环迭代期间正常期望。
有关延迟扩展的更多信息,请参见Raymond Chen的博客。
to repredment ansgar wiechers的有用答案:
从批处理文件/cmd.exe
控制台窗口执行以下命令应执行您想要的工作:
powershell -command ""$(Get-Content file.txt)" > newFile.txt"
请注意,嵌入式
"
的逃避为"
,powershell从外部称为时需要的(相反,powershell- internally`
是逃生角色)。使用 suppression
$(...)
封闭了Get-Content file.txt
调用 - 在 double quoted String 中输出 array - ,意味着数组元素与每个空间连接在一起。
但是,请注意,PowerShell的输出还原运算符>
,默认情况下创建UTF16-LE(" Unicode")编码文件,Out-File
也是如此(至少在 Windows powershell中; crosshell; cross---平台powershell core 默认为(bom-bom-bom-eutf-8)。
要控制输出编码,请使用-Encoding
参数,您可以将其应用于Out-File
或最好 - 知道正在输出 strings 正在输出-Set-Content
。
在Windows PowerShell中,请注意Set-Content
-与>
/Out-File
相比 - 默认为遗留" ANSI"代码页面所隐含的编码,通常是Windows -Windows -1252。