[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 7# newswan


    谢谢,有很多样本,分列中间只有一个空格,只能按宽度了,这个分列其实比较简单,用cmd也够用了
你的这个我抄不来后面该怎么写,尝试失败

TOP

第四列为空,文件中有乱码
  1.    9    0.252   m?                                           Baseplate                               Concrete       630.000 300x300x200mm                 
复制代码
1

评分人数

TOP

两种表达方法基本一样。前面是“空格+*”,表示行首可以有若干空格或没有空格均可,[1-9]表示空格后或行首必须有1-9中数字中的1个组成,[0-9]*表示前面的数字后面可以有0到若干数字,*后面实际还有个空格。
总的意思是:匹配行首由若干空格+若干数字(至少一个)+至少一个空格组合的行,或者行首由若干数字(至少一个)+至少一个空格组合的行。
更复杂一些的可参考:
http://www.bathome.net/thread-57570-1-1.html
你的文本过于复杂,个人觉得批处理有点勉为其难。还是想想其他途径。
1

评分人数

TOP

回复 18# qixiaobin0715


    谢谢,按照宽度我试了很久,发现更多问题,还是你这个生成后手改更容易一些
还想请问
/br是否表示/b /r?
moc922.txt:看起来是自动生成的,能否将.txt:全部自动删除?
在for循环中,若干个连续字符,是否等同于单个该字符?(也就是说1,2和1,,,,2都一样只会分成1和2两个字段)

TOP

有乱码,还有空列
  1.    1    11.3448 m     HW-Beam                                 HW100X100                               St37-1         187.379                              
  2.    2    14      Pcs   A-Plate 16401                           A-Pl16401 200x200x10                    St37-1          43.960                              
  3.    3    1       Pcs   C-Plate 12401                           C-Pl12401_1 240x210x10                  St37-1           3.956                              
  4.    4    4       Pcs   Tr鋑erklemme                            HCS TK                                  St37-1           1.732                              
  5.    5    4       Pcs   Hexagon head bolt                       ISO 4014 - M12x40                       8.8 St           0.256                              
  6.    6    4       Pcs   Hexagon nut                             ISO 4032 - M12                          8.8 St           0.100                              
  7.    7    8       Pcs   Washer                                  ISO 7090-12                             8.8 St           0.048                              
  8.    8    56      Pcs   Duty anchor + HIT-HY150                 HAS M16x125/38                          5.6 St           7.000                              
  9.    9    0.252   m?                                           Baseplate                               Concrete       630.000 300x300x200mm                 
复制代码

TOP

回复 20# newswan


    看起来第一行二三列你分开了啊

TOP

本帖最后由 newswan 于 2021-8-31 14:05 编辑

如果例外情况不多,可以一个一个处理
  1. Get-Item *.txt | ForEach-Object { (Get-Content $_) -match "\s{3}\d+\s" -replace "^\s+(\d+)\s+([\d.]+)\s+",($_.BaseName + ",`$1,`$2,") -replace "\s{2,}","," -replace "(?=Baseplate)","," } | Out-File list
复制代码

TOP

回复 19# jave000
moc922.txt:是如何产生的?把代码发上来看看。

TOP

回复 23# qixiaobin0715


    因为我文件夹里不止一个MOC922.txt,你的代码里我把MOC922.txt改成了*.txt再运行
若干个txt生成结果就是额外自动生成了第一列

TOP

回复 24# jave000
你是想保留文件名还是不保留?
如果要保留是和序号在一列还是单独一列?

TOP

回复 15# jave000
代码默认两个以上空格分为一列。

TOP

第一行的二三列分不开,第九行的七八列分不开
是因为它们之间只有一个空格,代码就识别不了,电脑不是人脑,识别不了。

TOP

回复 25# qixiaobin0715


      要保留的,单独一列。
所有文件都是一样的,只要第一步将“ m”改为“  m”,“0 3”改为“0  3”就行,然后继续双空格替换为“#”,”# “替换为“#”,这些我大概会改。
就是好奇为什么不需要将若干个连续的“#*”替换为“#”?

TOP

回复 19# jave000


/br是否表示/b /r?

是的,有些命令的参数必须分开写,有些命令的参数可以合在一起。我个人倾向于分开写。
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 jave000 于 2021-8-31 17:12 编辑

回复 22# newswan


    @powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & exit /b
$jave = read-host "Project Model Folder"
$CXMPV = [Environment]::GetFolderPath("Desktop")
$sour = "\\btssvr9\pds1\$jave\3d\su\report"
$dest = "$CXMPV\Print"
do
{
    $minute = read-host "Minutes of Minutes"
    $minute = $minute.trim()
}
while ($minute -match "\D")
Get-ChildItem -Path $sour -File |
    Where-Object { ($_.CreationTime -gt (get-date).AddMinutes(-$minute)) -or ($_.LastWriteTime -gt (get-date).AddMinutes(-$minute)) } |
    foreach-object {
        write-host $_.fullname
        copy-item $_.fullname -Destination $dest
    }
Get-Item  *.txt | ForEach-Object { (Get-Content $_) -match "\s{3}\d+\s" -replace "^\s+(\d+)\s+([\d.]+)\s+",($_.BaseName + ",`$1,`$2,") -replace "\s{2,}","," -replace "Baseplate",",Baseplate" } | Out-File z-su.csv
Invoke-Item $sour

尝试了一下,我们服务器网盘的文件无法直接处理,只能先复制过来,再处理,但是powershell删除$dest目录下所有txt是什么句式我还不知道
另外我转成csv或txt,都没有自动分列,都在同一列,remarks分列我可以自己想想
这个环视替换挺有用,cmd要是也能用就好了
也想着把时间判定删掉,只保留以下,但是运行失败了
Get-ChildItem -Path $sour -File |
    foreach-object {
        write-host $_.fullname
        copy-item $_.fullname -Destination $dest

TOP

返回列表