找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: jave000

[文本处理] 【已解决】求助批处理实现文本分列

[复制链接]
发表于 2021-8-31 18:11:50 | 显示全部楼层
回复 28# jave000
将下列代码放在5楼4-5行之间:
  1. set "str1=!str: m =  m !"
  2. set "str1=!str:0 3=0  3!"
复制代码
但我总觉得这样改有点牵强,也会有问题。先试试吧。

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 乐于助人

查看全部评分

发表于 2021-8-31 18:20:53 | 显示全部楼层
回复 24# jave000
MOC922.txt改成了*.txt运行的话,增加一行代码:
  1. set "str1=!str1:.txt:=,!"
复制代码
发表于 2021-8-31 18:42:00 | 显示全部楼层
回复 30# jave000


csv 要求,如果有空格,必须用""
发表于 2021-8-31 18:57:21 | 显示全部楼层
本帖最后由 newswan 于 2021-8-31 19:43 编辑

  1. Get-Item *.txt | ForEach-Object {
  2.     (Get-Content $_) -match "\s{3}\d+\s" `
  3.         -replace "^\s+(\d+)\s+([\d.]+)\s+",($_.BaseName + ",`$1,`$2,") `
  4.         -replace "\s+$","" `
  5.         -replace "\s{2,}","," `
  6.         -replace "(?=Baseplate)","," `
  7. } | Out-File list
复制代码
发表于 2021-8-31 19:19:47 | 显示全部楼层
回复 33# newswan
好像你记错了,列内有英文逗号,整列要加双引号;列内有双引号的,双引号字符要连续写两次,且整列再加双引号。
发表于 2021-8-31 19:35:32 | 显示全部楼层
回复 35# qixiaobin0715


看了一下,好像空格不必 ""
发表于 2021-8-31 19:52:00 | 显示全部楼层
本帖最后由 newswan 于 2021-8-31 23:40 编辑

现在没有 office 不好测试,csv 的规范 有些不一致
ms office 默认tab
不知道要不要求标题,字段数量
发表于 2021-8-31 23:40:06 | 显示全部楼层

  1. Get-Item *.txt | ForEach-Object {
  2.     (Get-Content $_) -match "\s{3}\d+\s" `
  3.         -replace "^\s+(\d+)\s+([\d.]+)\s+",($_.BaseName + "`t`$1`t`$2`t") `
  4.         -replace "\s+$","" `
  5.         -replace "\s{2,}","`t" `
  6.         -replace "(?=Baseplate)","`t" `
  7. } | Out-File list.csv
复制代码

评分

参与人数 1技术 +1 收起 理由
jave000 + 1 乐于助人

查看全部评分

 楼主| 发表于 2021-9-1 09:10:25 | 显示全部楼层
本帖最后由 jave000 于 2021-9-1 09:12 编辑

回复 38# newswan


    Remove-Item -Path $dest * -Include .txt
    Remove-Item -Path $dest\ * -Include .txt
    Remove-Item -Path $dest\* -Include .txt
    Remove-Item -Path $dest -Include *.txt
    Remove-Item -Path $dest *.txt
    Remove-Item -Path $dest\*.txt
我试了如上的代码,全都无法删除txt,请问是为什么?

所以`t表示分列符号喽,你prt代码我又多看懂一点
 楼主| 发表于 2021-9-1 09:38:36 | 显示全部楼层
回复 38# 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 + "`t`$1`t`$2`t") `
        -replace "\s+$","" `
        -replace "\s{2,}","`t" `
        -replace "(?=Baseplate)","`t" `
        -replace " (?=\d+x\d+x\d+mm)","`t" `
} | Out-File z-su.csv
Invoke-Item -Path $sour
Remove-Item -Path $dest -File *.txt
 楼主| 发表于 2021-9-1 10:09:19 | 显示全部楼层
回复 31# qixiaobin0715


     这几天正在学习for、set、if,现在印象更深了,谢谢
发表于 2021-9-1 16:05:57 | 显示全部楼层
 楼主| 发表于 2021-9-1 22:49:03 | 显示全部楼层
本帖最后由 jave000 于 2021-9-2 12:46 编辑

回复 42# newswan


失败
    Remove-Item -Path $dest * -Include *.txt
成功
    Remove-Item -Path $dest* -Include *.txt
    Remove-Item -Path $dest*.txt
    Remove-Item $dest*.txt


另外Get-Item和Get-childItem的区别是后者包括指定路径下的子目录么?
但我目前用的功能都是指定路径根目录下,结果改了你的一个Get-childItem成为Get-Item却无法运行了,很费解
发表于 2021-9-2 21:13:10 | 显示全部楼层
回复 43# jave000

可以多一个 \ 比较清晰
  1. $dest = "D:"
  2. Test-Path $dest\1
复制代码
 楼主| 发表于 2021-9-3 23:11:28 | 显示全部楼层
回复 44# newswan


    所以代码里前面带\,后面还带\,路径中一个\和两个\是等价的?
这样挺好的,$dest*.txt还好,如果说$destabc.txt,真的怀疑程序能否识别了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:40 , Processed in 0.031731 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表