Powershell VB输入框验证

时间:2018-01-07 15:24:40

标签: powershell

我似乎对此有点困惑,看起来它应该非常简单。我一直在谷歌搜索和尝试各种各样的东西3小时,但是无法得到它。

只是一个小警告:下面的代码实际上不是我自己的(很可能是编码不好的位)。我收集了来自大约30个不同来源的信息以使其正常工作,我没有保留参考书目,所以如果其中一些看起来像你的作品,那么谢谢你,抱歉没有能够给你信任。

这个脚本的作用是监视由栓系相机生成的jpg文件的文件夹,当新文件到达时弹出一个输入框并要求新文件名,然后重命名新文件,创建一个副本一个子目录并调用外部exe,它将复制的文件大小调整为500x500px。

如上所述,它有效,但我知道它很乱,我似乎无法弄清楚如何验证用户将信息输入到输入框中并选择了OK(而不是取消,或者没有输入信息)。我似乎也无法弄清楚如何将这些重复的地址声明为$变量。脚本因我尝试的一切而失败。

这是脚本,您可以提供的任何帮助都会很棒。

#   DECLARE GLOBAL VARIABLES
$global:directory = "C:\Users\JoeBlogs\Desktop\Folder"
$filter = "*.jpg"

#   SET FOLDER TO WATCH + FILES TO WATCH + NO SUBFOLDERS
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = $global:directory
    $watcher.Filter = $filter
    $watcher.IncludeSubdirectories = $false
    $watcher.EnableRaisingEvents = $true

#   DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $latest = dir $global:directory | Sort CreationTime -Descending | Select name -First 1
        $name = $latest.name
        $basename = $name.ToUpper().replace(".JPG","")
        Add-Type -AssemblyName Microsoft.VisualBasic
        $newname = [Microsoft.VisualBasic.Interaction]::InputBox('New file name', 'Rename File', $basename)
        Rename-Item $global:directory\$name $newname".jpg"
        if (!(Test-Path -path $global:directory\"Resized")) {New-Item $global:directory\"Resized" -Type Directory}
        Copy-Item -path $global:directory\$newname".jpg" -destination $global:directory\"Resized"\$newname".jpg"
        &"C:\Users\JoeBlogs\Desktop\PhotoResize500x500IOQ100.exe" $global:directory"\Resized\"$newname".jpg"
              }    
#   DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    while ($true) {sleep 3}

1 个答案:

答案 0 :(得分:1)

验证用户是否将信息输入到输入框中并选择确定

如果用户按下cancel或将输入字段留空,则$newname为空。 这可以在if语句中使用,以确保仅在输入正常时才进行重命名:

$newname = [Microsoft.VisualBasic.Interaction]::InputBox('New file name', 'Rename File', 'ddd')
if ($newname) {
  Rename-Item $global:directory\$name $newname".jpg"
...
}

其他改进

声明其他变量resized_directory,因为它使用了几次:

$global:resized_directory = "C:\Users\JoeBlogs\Desktop\Folder\Resized"

这一行应该移到顶部,因为这只需要进行一次:

if (!(Test-Path -path $resized_directory)) {New-Item $resized_directory -Type Directory}