基本上,我想从file.txt中读取内容
apple banana carrot
并写入newfile.txt以使其具有内容
apple banana carrot
我需要在没有安装权限的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"
但两者都产生一个空文件。 有没有办法做到这一点?
答案 0 :(得分:4)
(Get-Content 'input.txt') -join ' ' | Set-Content 'output.txt'
将行文件的内容作为行数组返回,并且已删除换行符,因此您需要做的就是(在PowerShell中)加入行并将结果写回文件:
@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (file.txt) do set "row=!row! %%x"
>newfile.txt echo %row%
不推荐,但如果您必须批量执行此操作,则需要以下内容:
%row%
请注意,延迟扩展必需才能生效。如果没有它,循环体中的!row!
将在解析时扩展(当变量仍然为空时),因此在循环完成后,您将最终只得到变量中输入文件的最后一行。启用延迟扩展(并使用%row%
而不是Select
),变量在运行时扩展,即在循环迭代期间,正如人们通常期望的那样。
有关延迟扩展的详细信息,请参阅https://laravel.com/docs/authentication#other-authentication-methods。
答案 1 :(得分:0)
补充 Ansgar Wiechers' helpful answer:
从批处理文件/ cmd.exe
控制台窗口执行以下命令应该可以达到您想要的效果:
powershell -command "\"$(Get-Content file.txt)\" > newFile.txt"
请注意嵌入式"
作为\"
的转义,PowerShell从外部调用时需要这样做(相比之下,PowerShell- 内部,`
是转义字符。)
使用子表达式运算符<,在{em>双引号字符串中包含Get-Content file.txt
调用 - 输出行的数组 / em> $(...)
,表示数组元素隐式地连接每个空格。
但请注意,PowerShell的输出重定向运算符>
默认创建UTF16-LE(&#34; Unicode&#34;)编码文件,Out-File
也是如此(至少在 Windows PowerShell中;跨平台的PowerShell Core 默认为(无BOM)UTF-8)。
要控制输出编码,请使用-Encoding
参数,您可以将其应用于Out-File
,或者最好 - 知道正在输出字符串 - {{1} }。
在Windows PowerShell中,请注意Set-Content
- 与Set-Content
/ >
形成对比 - 默认为传统&#34; ANSI&#34;代码页,通常是Windows-1252。