本帖最后由 xczxczxcz 于 2019-5-28 15:23 编辑
其实我上面的脚本有 5 个问题:
一、 TRY{} 内两个赋值语句 没有错误返回值。不会抛异常。
二、 当用户输入一组数字时 没有做异常处理。
三、 $num 赋值有些画蛇添足。 直接 n1..n2 即可。
四、 当n1 大于 n2 时。系统会直接从 n1 截断以 n1为最小值。 所以要加 sort. 或者修改 -in 参数。
五、函数中用了 ''' ,这个空行并不会在控制台显示,而是被返回值吃掉了。
把修改好的再发上来。KAO. 我好象没这么严谨的发过脚本。 powershell 3.0+ 这个可以随意使用了。- $list=ls "$pwd\0000\" -dir|?{$_.name -match '^[\d]*$'};
-
- Function Get-InputNum {
- write-host "文件夹序号范围:$($list[0]) - $($list[-1])`n" -fore Green;
- Write-Host "输入序号:用【.,*-+/\=或空格】等分开`n" -fore Yellow;
- $ref = $enter = $null;
- $enter = Read-Host -Prompt "输入要移动的文件夹序号范围";
-
- if ( !$enter ) {
- cls;Write-Host '输入数字范围' -fore red; Get-InputNum;
- }
-
- $ref = (-join $enter).Trim() -split '\.|,|-|\*|\+|=|/|\\|\s+';
- if ( $ref.count -eq 1 ) {
- Try {
- $n2 = $n1 = [int]$ref.Trim();
- } catch {
- cls;
- Write-Host "文件错误,重新输入`n" -fore red;
- Get-InputNum;
- }
- Return $n1,$n2;
- }
-
- Try {
- $n1 = [int]$ref[0].Trim();
- $n2 = [int]$ref[1].Trim();
- } catch {
- cls;
- Write-Host "文件错误,重新输入`n" -fore red;
- Get-InputNum;
- }
- Return $n1,$n2;
- }
-
- $enter = Get-InputNum;
- Clear-Host;
- $num = $enter[0]..$enter[1] | sort;
- $folder = @(ls "$pwd\0000\" -dir|?{$_.name -in $num});
- Foreach ( $d in $folder )
- {
- if ( [io.directory]::Exists("$pwd\0000\0\$d") ) {
- Write-Host "已存在 $d 跳过移动";
- Continue;
- };
- move "$pwd\0000\$d" -dest "$pwd\0000\0\" -verb -WhatIf;
- }
-
- Pause;
复制代码
|