标题: [问题求助] powershell 数字比较不起作用 [打印本页]
作者: gflrlm 时间: 2019-10-13 11:53 标题: powershell 数字比较不起作用
本帖最后由 gflrlm 于 2019-10-13 11:57 编辑
大家好,powershell发现一个奇怪的问题, 我 D:\000下面有几百个txt文件,命名是 1.txt, 2.txt 3.txt .... 100.txt
然后我想每10个移动到一个文件夹里面,文件夹命名 1-10,11-20,21-30.。。
代码如下:-
- $Path ="D:\000\"
- #$Path ="D:\001----nobackup---imdb"
- $Filter = '*.*'
- $_Debug = 1
-
-
- write-host " filelist begin:"
- $filelist = @()
- Get-ChildItem -Path $Path | ?{$_.psiscontainer -eq $false} | %{$filelist += ($_.FullName )}
- # Get-ChildItem -Path $Path -name
-
-
- write-host " in end:" $fileList.Count
- $step=10 #50000
- $total=200 #600000
- for($i=0;$i -le $total/$step;$i++) {
- $start=$step*$i+1
- $end=$step*($i+1)
- $path_mkdir="$Path"+"$start"+"-"+"$end"
- if(!(Test-Path $path_mkdir)) {
- mkdir $path_mkdir
- write-host "mkdir $path_mkdir"
- }
- }
-
- Foreach($file in $fileList)
- {
- if($file -match ".*\\(.*).txt") {# 获取 id
- $file_id=$matches[1]
- }
- write-host "f = " $file ", id= <"$file_id">"
- for($i=0;$i -le $total/$step;$i++) {
- $start=$step*$i+1
- $end=$step*($i+1)
- $path_mkdir="$Path"+"$start"+"-"+"$end"
- write-host "($file_id -ge $start) -and ($file_id -le $end)"
- if(($file_id -ge $start) -and ($file_id -le $end) ) {
- mv -force $file $path_mkdir
- write-host "move $file to $path_mkdir" -ForegroundColor red
- }
- }
- exit
- }
复制代码
但是从91.txt开始就不起作用了,移动不了,这个条件进不去 "if(($file_id -ge $start) -and ($file_id -le $end) ) {"
通过下面log发现,并没有问题。 真是神奇了。。- f = D:\000\91.txt , id= < 91>
- (91 -ge 1) -and (91 -le 10)
- (91 -ge 11) -and (91 -le 20)
- (91 -ge 21) -and (91 -le 30)
- (91 -ge 31) -and (91 -le 40)
- (91 -ge 41) -and (91 -le 50)
- (91 -ge 51) -and (91 -le 60)
- (91 -ge 61) -and (91 -le 70)
- (91 -ge 71) -and (91 -le 80)
- (91 -ge 81) -and (91 -le 90)
- (91 -ge 91) -and (91 -le 100)
- (91 -ge 101) -and (91 -le 110)
- (91 -ge 111) -and (91 -le 120)
- (91 -ge 121) -and (91 -le 130)
- (91 -ge 131) -and (91 -le 140)
- (91 -ge 141) -and (91 -le 150)
- (91 -ge 151) -and (91 -le 160)
- (91 -ge 161) -and (91 -le 170)
- (91 -ge 171) -and (91 -le 180)
- (91 -ge 181) -and (91 -le 190)
- (91 -ge 191) -and (91 -le 200)
- (91 -ge 201) -and (91 -le 210)
复制代码
PS, win10 系统,版本信息如下:
PS D:\> $psversiontable
Name Value
---- -----
PSVersion 5.1.18362.145
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.145
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
作者: ivor 时间: 2019-10-13 13:51
$file_id 值好像一直是91
作者: WHY 时间: 2019-10-13 14:33
猜测是把数字当着字符串比较了,
(91 -ge 201) -and (91 -le 210)
91 -ge 201 为 true,但 91 -le 210 为 false
试试 if((1*$file_id -ge $start) -and (1*$file_id -le $end) )
作者: WHY 时间: 2019-10-13 14:38
这样应该也可以- $Path = "D:\000\"
- $step=10 #50000
- $total=100 #600000
- for($i=0; $i -lt $total; $i++) {
- $start = [Math]::floor($i/$step)*$step + 1;
- $end = [Math]::floor($i/$step+1)*$step;
-
- $path_mkdir = $Path + $start + "-" + $end;
- $file = $path + ($i + 1) + '.txt';
-
- if( !(Test-Path $path_mkdir) ){
- mkdir $path_mkdir;
- }
- if( Test-Path $file ){
- mv -force $file ($path_mkdir + '\');
- }
- }
复制代码
作者: gflrlm 时间: 2019-10-13 19:28
回复 3# WHY
这个可以,确实当做 字符串了。 我用的perl的思路,以为能自动转,哈哈。
作者: gflrlm 时间: 2019-10-13 19:29
回复 4# WHY
这个也是可以的,理由同上,哈哈, 感谢各位帮忙,多谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |