Board logo

标题: [文本处理] [已解决]批处理怎样删除文本(只有一行)里面最后一个 \ 以后的内容,谢谢 [打印本页]

作者: yyz219    时间: 2022-12-24 14:32     标题: [已解决]批处理怎样删除文本(只有一行)里面最后一个 \ 以后的内容,谢谢

本帖最后由 yyz219 于 2022-12-25 17:08 编辑

下面比较科学
  1. @echo off
  2. for /f "delims=" %%i in ('type "Old.txt"') do (
  3.     >"New.txt" echo,%%~dpi
  4. )
复制代码
问题可以解决了:
  1. @echo off
  2. for /f "delims=*" %%a in (文本.txt) do (
  3.     for /f "delims=" %%i in ("%%a") do (
  4.         echo %%~dpi>>xx.tmp
  5.         move /y xx.tmp 文本.txt
  6.     )
  7. )
  8. pause
复制代码

***************************************************
原来的问题:

求批处理:删除文本(只有一行)里面最后一个 \  以后的内容,谢谢

文本内容形如(变化的):
D:\记事本的收藏夹\常用命令.bat

希望运行以后,变为:
D:\记事本的收藏夹\
或者
D:\记事本的收藏夹

******************************
也就是,要将文件完整路径,变为所在目录
作者: pd1    时间: 2022-12-24 15:18

  1. #&cls&@Powershell "& {[ScriptBlock]::Create("'#' + (gc '%~f0' -raw)").Invoke()}" & pause & exit
  2. Get-Content .\1.txt|%{$_.substring(0,$_.lastindexof("\"))}
复制代码

作者: 77七    时间: 2022-12-24 15:23

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=*" %%a in (文本.txt) do (
  4.     for /f "delims=" %%i in ("%%a") do (
  5.         set "lj=%%~dpi"
  6.         echo !lj!>>xx.tmp
  7.         move /y xx.tmp 文本.txt
  8.     )
  9. )
  10. endlocal
  11. pause
复制代码

作者: yyz219    时间: 2022-12-24 15:26

pd1 发表于 2022-12-24 15:18



    我试一试先 谢谢
作者: yyz219    时间: 2022-12-24 15:26

77七 发表于 2022-12-24 15:23



     我试一试先 谢谢
作者: yyz219    时间: 2022-12-24 15:38

本帖最后由 yyz219 于 2022-12-24 15:44 编辑
77七 发表于 2022-12-24 15:23


运行以后

第一个 \ 以后的内容都被删除了
我需要的是:删除 最后一个 \ 以后的内容
作者: yyz219    时间: 2022-12-24 15:41

pd1 发表于 2022-12-24 15:18



    运行后,提示:

Get-Content : 找不到与参数名称“raw”匹配的参数。
所在位置 行:1 字符: 70
+ & {[ScriptBlock]::Create('#' + (gc 'D:\桌面\Desktop\打开文件位置\00.bat' -raw
<<<< )).Invoke()}
    + CategoryInfo          : InvalidArgument: ( [Get-Content], ParameterBin
   dingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
   ands.GetContentCommand

请按任意键继续. . .
作者: 77七    时间: 2022-12-24 15:46

回复 6# yyz219 把文本保存为ansi格式
作者: pd1    时间: 2022-12-24 15:50

回复 7# yyz219

你什么系统?正常win7就带powershell了,还是用的什么精简版系统?
作者: pd1    时间: 2022-12-24 15:52

  1. <# :
  2. @echo off
  3. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
  4. pause
  5. #>
  6. Get-Content .\1.txt|%{$_.substring(0,$_.lastindexof("\"))}
复制代码
也有可能是版本低了吧,试试这个
作者: pd1    时间: 2022-12-24 15:56

确实是你的版本低了
您正在使用PowerShell v2或更早版本。 PowerShell v3引入了参数-Raw
作者: yyz219    时间: 2022-12-24 15:58

回复  yyz219 把文本保存为ansi格式
77七 发表于 2022-12-24 15:46



    成功了,再次感谢
作者: yyz219    时间: 2022-12-24 16:22

本帖最后由 yyz219 于 2022-12-24 16:54 编辑
回复  yyz219 把文本保存为ansi格式
77七 发表于 2022-12-24 15:46



    如果路径有 “!”  号,“!”  号不会出来

看看能不能再修改一下?谢谢
作者: yyz219    时间: 2022-12-24 16:49

也有可能是版本低了吧,试试这个
pd1 发表于 2022-12-24 15:52



    这个可以,就是有一点慢
作者: 77七    时间: 2022-12-24 18:18

回复 13# yyz219

  1. @echo off
  2. for /f "delims=*" %%a in (文本.txt) do (
  3.     for /f "delims=" %%i in ("%%a") do (
  4.         echo %%~dpi>>xx.tmp
  5.         move /y xx.tmp 文本.txt
  6.     )
  7. )
  8. pause
复制代码

   好像延迟变量写多余了...      !被当成延迟变量标志省略了
作者: pd1    时间: 2022-12-24 18:22

回复 14# yyz219


    你的有多少行?
作者: yyz219    时间: 2022-12-24 18:23

回复  yyz219


   好像延迟变量写多余了...      !被当成延迟变量标志省略了
77七 发表于 2022-12-24 18:18


辛苦了 谢谢
作者: yyz219    时间: 2022-12-24 18:25

回复  yyz219


    你的有多少行?
pd1 发表于 2022-12-24 18:22



    只有一行
作者: pd1    时间: 2022-12-24 18:38

这个应该快一些,yuan.txt是原本的,new.txt是新生成的
  1. <# :
  2. @echo off
  3. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
  4. pause
  5. #>
  6. Measure-Command{ [IO.File]::WriteAllLines(".\new.txt",([io.file]::ReadAllLines(".\yuan.txt")|%{$_.substring(0,$_.lastindexof("\"))}))}
复制代码

作者: pd1    时间: 2022-12-24 18:42

回复 18# yyz219


    一行你说的慢体现在哪?没明白
作者: Batcher    时间: 2022-12-25 16:31

回复 15# 77七


一层for循环就够了
  1. @echo off
  2. for /f "delims=" %%i in ('type "Old.txt"') do (
  3.     >"New.txt" echo,%%~dpi
  4. )
复制代码

作者: yyz219    时间: 2022-12-25 16:57

回复  77七


一层for循环就够了
Batcher 发表于 2022-12-25 16:31


我试一试 谢谢
作者: yyz219    时间: 2022-12-25 17:02

回复  77七


一层for循环就够了
Batcher 发表于 2022-12-25 16:31


成功了 再次感谢
作者: xczxczxcz    时间: 2022-12-25 17:22

冒个泡,来个通用的。非完整路径也可以用。
  1. @echo off
  2. cd /d "%~dp0"
  3. set /p str=<a.txt
  4. set "_out="
  5. :loop
  6. for /f "tokens=1* delims=\" %%i in ("%str%") do (
  7. if "%%j" neq "" (
  8. set "_out=%_out%\%%i"
  9. set "str=%%j"
  10. goto :loop
  11. )
  12. )
  13. echo %_out:~1%
  14. pause
复制代码

作者: 77七    时间: 2022-12-25 17:25

回复 21# Batcher

谢谢管理员大佬指点,我还没用过type...有时间去学习下!
作者: yyz219    时间: 2022-12-25 17:30

冒个泡,来个通用的。非完整路径也可以用。
xczxczxcz 发表于 2022-12-25 17:22



    感谢大师出手
作者: xczxczxcz    时间: 2022-12-25 17:53

回复 19# pd1

好复杂啊!
这样试试:
  1. @echo off
  2. cd /d "%~dp0"
  3. powershell -c "(gc '%~dp0a.txt') -replace '\\[^\\]*$'|sc %~dp0a.txt -force"&pause
复制代码

作者: yyz219    时间: 2022-12-25 19:09

回复  pd1

好复杂啊!
这样试试:
xczxczxcz 发表于 2022-12-25 17:53


这个简洁
作者: pd1    时间: 2022-12-26 11:29

回复 27# xczxczxcz


    他说速度慢,我还以为又是百万千万行的呢,结果就一行
一行随用用什么写,随便怎么写页很难慢吧
作者: yyz219    时间: 2022-12-26 11:36

回复  xczxczxcz


    他说速度慢,我还以为又是百万千万行的呢,结果就一行
一行随用用什么写,随便 ...
pd1 发表于 2022-12-26 11:29


目的是实现最自动化哦




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2