Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell If/Then-Then即使在条件为false时也执行_Powershell - Fatal编程技术网

Powershell If/Then-Then即使在条件为false时也执行

Powershell If/Then-Then即使在条件为false时也执行,powershell,Powershell,下面是一个包含jpg的文件夹,将文件名替换为nnnZ.jpg,如果图像是横向的,则跳过一个数字 我在上看到了示例,看起来if语句或条件($w-gt$h)的语法没有问题,但是每次都会执行“then”,即使文件夹中只有一个图像是纵向的。$w和$h的值是正确的(根据echo),所以我不明白出了什么问题 编辑:或者这些值实际上是字符串,这就是%s的意思吗 Get-ChildItem | foreach { $w=$(magick identify -format '%w' $_) $h=$(ma

下面是一个包含jpg的文件夹,将文件名替换为nnnZ.jpg,如果图像是横向的,则跳过一个数字

我在上看到了示例,看起来if语句或条件($w-gt$h)的语法没有问题,但是每次都会执行“then”,即使文件夹中只有一个图像是纵向的。$w和$h的值是正确的(根据echo),所以我不明白出了什么问题

编辑:或者这些值实际上是字符串,这就是%s的意思吗

Get-ChildItem | foreach {
  $w=$(magick identify -format '%w' $_)
  $h=$(magick identify -format '%h' $_)
  $flag="false"
  if ($w -gt $h) {
    $c++
    $flag="true"
  }
  $newname = "$($c)Z.jpg".Padleft(8,'0')
  Rename-Item $_ -NewName $newname
  $c++
  echo $w $h $flag $c
}

为了避免出现另一个“未回答”的问题,以下是我的评论作为回答:

$w=$(magick-identification-format'%w'$\u)
$h=$(magick-identification-format'%h'$\u)
的代码生成字符串,而不是整数值

使用

[int]$w = $(magick identify -format '%w' $_)
[int]$h = $(magick identify -format '%h' $_)
所以这个比较会达到你的预期


如上所述,在上面的几行中,
$()
是不需要的,尽管它对获得结果没有害处。
基本上,一个简单的
()
分组表达式表示“先执行此部分”,而子表达式
$()
表示“先执行此部分,然后将结果作为变量处理”。它可以包含多个分号
分隔语句

如果需要获取宽度和高度的文件都是BMP、GIF、JPEG、PNG或TIFF类型,则不需要使用外部应用程序(如ImageMagick)来获取大小,因为.NET类可以很好地处理这些文件:

# open the image file
$img = [System.Drawing.Image]::FromFile($_.FullName)
$w = $img.Width   # these are Int32 values
$h = $img.Height
# dispose of this image object
$img.Dispose()

所以
magick标识-格式“%w”$\ucode>产生什么?看起来
$w
$h
的返回值是字符串,而不是整数值(将
[int]
放在前面)。@Theo Bingo,thanks@rchivers如果你不介意的话,我现在就把这个贴出来作为答案,所以这个问题不会一直没有答案(不幸的是,…)@mklement0$s是做什么的?我从某处或其他地方得到了那一行,并复制了整个内容。@rchivers,请参阅Theo的更新,但我要补充的是,
$(…)
只在两种情况下需要:如果需要嵌入整个语句,特别是条件语句和循环语句,或将任何表达式或语句嵌入可扩展(插值)字符串
“…”
。赋值RHS上的单个语句甚至不需要
(…)
,分组运算符,其本身足以嵌套单个命令或表达式。虽然不太可能,但不必要地使用
$(…)
可能会产生副作用-请参阅。