【问题标题】:Powershell VB Inputbox ValidationPowershell VB 输入框验证
【发布时间】:2018-01-08 01:53:56
【问题描述】:

我似乎有点坚持这一点,看起来它应该很简单。我已经在谷歌上搜索并尝试了 3 小时的各种东西,但就是无法得到它。

只是一个小警告:下面的代码并不是我自己的(可能是编码不佳的位)。我从大约 30 个不同的来源收集了信息以使其正常工作,并且我没有保留参考书目,因此如果其中一些看起来像您的作品,那么感谢您并抱歉无法给予您信任。

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

如前所述,它有效,但我知道它很混乱,我似乎无法弄清楚如何验证用户是否在输入框中输入了信息并选择了确定(而不是取消,或者没有输入信息)。我似乎也无法弄清楚如何将其中一些重复地址声明为 $variables。我尝试过的所有脚本都失败了。

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

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

【问题讨论】:

    标签: powershell


    【解决方案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}
    

    【讨论】:

    • 非常感谢 Aedvald,我实施了您的所有建议,一切正常。一个小烦恼是 InputBox 没有焦点,我必须手动单击它才能进行编辑。我可能会尝试 Ryant 的解决方案:stackoverflow.com/questions/9978727/…
    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多