使用out-file的-width参数指定了大小,但还是超过80个字符就被截了


PowerShell交流中心使用out-file的-width参数指定了大小,但还是超过80个字符就被截了
0
much asked 9 年 ago

如题,具体命令是;

dir -Recurse -file -Filter *.jpg | select fullname | Out-File -Width 500 1.txt

主要是把当前目录下所有.jpg文件和路径导出到1.txt中,结果在1.txt中,超过80个字符的被截了,此处Out-File命令的Width似乎没有生效。这是为什么呢?

 

OS 名称:          Microsoft Windows 10 企业版
OS 版本:          10.0.10240 暂缺 Build 10240

PSVersion                      5.0.10240.16384

0 Answers
-1
Mooser Lee 管理员 answered 9 年 ago

那个宽度受控制台影响的,跟width没关系。你可以这样改:

 dir -Recurse -file -Filter *.jpg | ForEach-Object {
$_.FullName | Out-File 1.txt -Append  
}

 

much replied 9 年 ago

多谢,使用上述使用确实可以达到目的。宽度是怎么受控制台影响的呢?能否详述或者提供相关链接?是否可以在控制台级别消除这个影响,而不改变我提供的命令呢?另外,您提供的这个命令我执行时有41000个文件,用时要比我那个命令长很多,大概长五分钟吧,还有更具效率的命令吗?

Mooser Lee 管理员 replied 9 年 ago

select object 是将对象从管道重定向到控制台输出,接着out-file会将控制台输出重定向到文件。在select object重定向控制台输出的过程中,会受当前控制台缓冲区的影响,字符串会被截断。

Mooser Lee 管理员 replied 9 年 ago

另外一个原因是select object 默认会以表格输出,试想一下,select p1,p2,p3,表格输出不截断,简直要逆天了。但是如果你一定像用select-object,并且确定了只关注fullname,那还有一招:讲你自己脚本中的select fullname 改成select -ExpandProperty FullName,这样就不用制表输出了,自然也不需要截断了。你可以比较一下性能。