加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:44:56 所属栏目:Windows 来源:网络整理
导读:我有一个批处理脚本,提示用户输入一些输入,然后输出我在AIX环境中使用的几个文件.这些文件需要是UNIX格式(我认为是UTF8),但我正在寻找SIMPLEST方法的一些方向. 我不喜欢下载额外的软件包; Cygwin或GnuWin32.如果有可能,我不介意编码,我的编码选项是Batch,Pow
我有一个批处理脚本,提示用户输入一些输入,然后输出我在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 
  }

寻找一些方向或一些输入.

没有批处理文件中的外部工具,您无法执行此操作.

如果您只需要文件编码,那么您提供的代码段应该可以使用.如果你想内联转换文件(而不是将它们写到另一个地方),你可以这样做

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读