通过Powershell或Batch将文件从Windows转换到UNIX

我有一个批处理脚本,提示用户input一些input,然后输出我在AIX环境中使用的几个文件。 这些文件需要在UNIX格式(我相信是UTF8),但我正在寻找一个方向,以最简单的方式做到这一点。

我不喜欢下载额外的软件包; Cygwin或GnuWin32。 我不介意编码,如果可能的话,我的编码选项是批处理,Powershell和VBS。 有谁知道一个办法做到这一点?

或者,我可以使用批处理创build文件并调用Powershell脚本来重新创build这些文件?

这里的想法是一个用户会被提示input一些信息,然后输出一个标准文件,这些文件在AIX中基本上是一个工作的快速答案。 我最初使用批处理,因为我不知道我会遇到这个问题,但我有点倾向于在Powershell中重做这个。 因为我在另一个可以进行转换的论坛上find了一些代码(下面)。

% foreach($i in ls -name DIR/*.txt) { \ get-content DIR/$i | \ out-file -encoding utf8 -filepath DIR2/$i \ } 

寻找一些方向或在这方面的一些input。

Solutions Collecting From Web of "通过Powershell或Batch将文件从Windows转换到UNIX"

如果没有批处理文件中的外部工具,则不能这样做。

如果你所需要的只是文件编码,那么你给的代码段应该工作。 如果你想内联转换文件(而不是写他们到另一个地方),你可以做

 Get-ChildItem *.txt | ForEach-Object { (Get-Content $_) | Out-File -Encoding UTF8 $_ } 

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) } 

如果您使用的是ANSI字符而不是ASCII字符,请尝试重载版本ReadAllText(String,Encoding)。

 $contents = [IO.File]::ReadAllText($_, [Text.Encoding]::Default) -replace "`r`n", "`n" 

https://msdn.microsoft.com/en-us/library/system.io.file.readalltext(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx
ASCII – 获取ASCII(7位)字符集的编码。
默认值 – 获取操作系统当前ANSI代码页的编码。