rud*_*d3y 6 windows powershell batch-file utf-8
我有一个批处理脚本,提示用户输入一些输入,然后输出我在AIX环境中使用的几个文件.这些文件需要采用UNIX格式(我认为是UTF8),但我正在寻找SIMPLEST方法的一些方向.
我不喜欢下载额外的软件包; Cygwin或GnuWin32.如果有可能,我不介意编码,我的编码选项是Batch,Powershell和VBS.有谁知道这样做的方法?
或者,我可以用Batch创建文件并调用Powershell脚本来改造这些吗?
这里的想法是用户会被提示输入一些信息,然后我输出一个标准文件,这些文件基本上是AIX中为作业提示的快速答案.我最初使用Batch,因为我不知道我会遇到这个问题,但我有点倾向于在Powershell中重做这个.因为我在另一个可以进行转换的论坛上找到了一些代码(如下).
% foreach($i in ls -name DIR/*.txt) { \
get-content DIR/$i | \
out-file -encoding utf8 -filepath DIR2/$i \
}
Run Code Online (Sandbox Code Playgroud)
寻找一些方向或一些输入.
Joe*_*oey 16
如果没有批处理文件中的外部工具,则无法执行此操作
如果您只需要文件编码,那么您提供的代码段应该可以正常工作.如果你想内联转换文件(而不是将它们写到另一个地方),你可以做到
Get-ChildItem *.txt | ForEach-Object { (Get-Content $_) | Out-File -Encoding UTF8 $_ }
Run Code Online (Sandbox Code Playgroud)
(括号周围Get-Content是重要的)但是,这将在UTF-8的文件写入与在启动(U + FEFF),其中一些Unix工具不接受(即使它在技术上是合法的,但劝阻使用)的签名.
然后存在Windows和Unix之间的换行不同的问题.Unix仅使用U + 000A(LF),而Windows使用两个字符:U + 000D U + 000A(CR + LF).理想情况下,你也可以转换换行符.但这有点复杂:
Get-ChildItem *.txt | ForEach-Object {
# get the contents and replace line breaks by U+000A
$contents = [IO.File]::ReadAllText($_) -replace "`r`n?", "`n"
# create UTF-8 encoding without signature
$utf8 = New-Object System.Text.UTF8Encoding $false
# write the text back
[IO.File]::WriteAllText($_, $contents, $utf8)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13543 次 |
| 最近记录: |