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

[其他] 批处理如何在txt中的每一行从下往上读取?

[复制链接]
发表于 2019-1-12 09:18:53 | 显示全部楼层 |阅读模式
各位好,又要请教下,txt文本中,有没有从下往上读取txt方式,如:
txt
  1. "F:\Downloads\201812130355_LeboPCCast_3_11_05_Release"
  2. "F:\Downloads"
  3. "F:"
复制代码
从txt中读取后每行写到变量,谢谢
  1. "F:"
  2. "F:\Downloads"
  3. "F:\Downloads\201812130355_LeboPCCast_3_11_05_Release"
复制代码
发表于 2019-1-12 10:23:27 | 显示全部楼层
本帖最后由 ivor 于 2019-1-12 10:44 编辑
  1. $lines=gc a.txt;[array]::Reverse($lines);$lines
复制代码
你好,这应该不是windows批处理的吧?现在的批处理for能从txt中从上往下,如果for能从下往上也行
yunyan100 发表于 2019-1-12 10:29

如果要在批处理里面运行只需变通一下就可以了,bat+powershell混编兼容性很好的↓↓↓
  1. powershell -command " & {$lines=gc a.txt;[array]::Reverse($lines);$lines}"
复制代码

评分

参与人数 1技术 +1 收起 理由
yhcfsr + 1 数组翻转,好用法.

查看全部评分

 楼主| 发表于 2019-1-12 10:29:22 | 显示全部楼层
ivor 发表于 2019-1-12 10:23

你好,这应该不是windows批处理的吧?现在的批处理for能从txt中从上往下,如果for能从下往上也行
 楼主| 发表于 2019-1-12 10:55:03 | 显示全部楼层
回复 2# ivor
powershell一般不用
发表于 2019-1-12 15:07:41 | 显示全部楼层
这有何难

  1. @echo off
  2. for /f %%a in ('findstr/n ".*" a.txt^|sort/r') do (
  3.         set "line=%%a"
  4.         setlocal enabledelayedexpansion
  5.         echo;!line:*:=!
  6.         endlocal
  7. )
  8. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
ivor + 1 if file have more then nine lines,can't
523066680 + 1 holy high!

查看全部评分

发表于 2019-1-12 15:53:17 | 显示全部楼层
本帖最后由 happy886rr 于 2019-1-12 16:11 编辑

回复 2# ivor
这都被你发现了,只是哄哄他,估计他的变量也不会超过9个。
我赌他用不了那么多路径。
  1. sort/+1888
复制代码
发表于 2019-1-12 17:08:42 | 显示全部楼层
本帖最后由 523066680 于 2019-1-12 17:12 编辑

如果这个路径名单都是 一个目录树下的所有子目录,
那可能直接 sort xxx.txt 就可以?(仅针对这种情况处理,不通用)
  1. >sort xxx.txt
  2. "F:"
  3. "F:\Downloads"
  4. "F:\Downloads\201812130355_LeboPCCast_3_11_05_Release"
复制代码
 楼主| 发表于 2019-1-12 17:31:38 | 显示全部楼层
本帖最后由 yunyan100 于 2019-1-12 17:33 编辑

感谢你们好,路径长度不确定,有根目录到下面若干,5楼9个基本可以但可能超过,我改下但不适用
  1. for /f %%a in ('findstr/n ".*" 1.txt^|sort/r') do (
  2.         set "pa=%%a"
  3.         setlocal enabledelayedexpansion
  4.         set "pa=!pa:"=!"
  5.         echo "!pa:*:=!")>>1.txt&endlocal
  6. pause
复制代码
我下面发的是我在用,只是目前改进.文件夹或文件,要删除有"()&",通过"cd.."路径都可以
  1. cd /d "%pa%" >nul 2>nul
  2. :uacc
  3. for %%a in ("%cd%") do echo %%a>>%dp%\1.txt
  4. dir/ad "%cd%" >nul 2>nul&&cd..&&goto :uacc
  5. for /f "delims=" %%a in (%dp%\1.txt) do (setlocal enabledelayedexpansion&for %%i in (%%a) do (set "pay=%%~nxi"
  6. set "pay=!pay:(=!"
  7. set "pay=!pay:)=!"
  8. set "pay=!pay:&=!"
  9. set "pay=!pay: =!"
  10. ren %%i "!pay!" >nul 2>nul))&endlocal&del %dp%\1.txt >nul 2>nul
  11. if "%ee%"=="e" set "pac=%pa%"
  12. if "%ee%"=="e" set "pa=%pa%\%paa%"
  13. if "%ee%"=="e" set "paa=%paa:&=%"
  14. if "%ee%"=="e" set "paa=%paa:(=%"
  15. if "%ee%"=="e" set "paa=%paa:)=%"
  16. if "%ee%"=="e" ren "%pa%" "%paa%"
复制代码
发表于 2019-1-12 19:01:07 | 显示全部楼层
  1. powershell -command " & {$lines=((gc a.txt) -replace '[()&\s]','');[array]::Reverse($lines);$lines|sc a.txt}"
复制代码
过滤 ()&空格
发表于 2019-1-12 19:51:22 | 显示全部楼层
本帖最后由 happy886rr 于 2019-1-12 19:58 编辑

回复 8# yunyan100
sort/+1888就是答案,替换一下,多少个都能行。
另外过滤()&用sed就行。借助sed这1个第三方,你的要求都能达到。
实际上,这应该归属于批处理第三方问题,单纯依靠纯批处理是不擅长处理文本的,借助其他语言又会破坏批处理的粘合特性,只有第三方才能与批处理完美结合。
发表于 2019-1-12 20:10:40 | 显示全部楼层
本帖最后由 WHY 于 2019-1-12 20:11 编辑

回复 10# happy886rr


    悲催的是,Win7可以,Win10下 sort /+n这种办法失效了。
 楼主| 发表于 2019-1-12 20:23:50 | 显示全部楼层
本帖最后由 yunyan100 于 2019-1-12 20:26 编辑

回复 10# happy886rr


    批处理自已很行到能很,就是太麻烦些,这英语有点难,就是一文件夹或文件删除符号,且改过的也是传递变量
发表于 2019-1-12 21:12:32 | 显示全部楼层
本帖最后由 xczxczxcz 于 2019-1-12 21:19 编辑

回复 11# WHY

开始以为是 more; 再看是说 SORT ,不过测试 win10 下: sort /+n 有效。 sort /+n xxxx /r 也有效。
发表于 2019-1-12 21:32:22 | 显示全部楼层
回复 11# WHY
到了win10就没理由不用 powershell 了吧
发表于 2019-1-12 21:46:57 | 显示全部楼层
回复 13# xczxczxcz


    我说的不准确,sort /+n n的值很小可以,n 的值为一个大数值不行(将文本倒序)。我记得好像在 win10 v1803 版本测试就没通过。
Microsoft Windows [版本 10.0.17763.194]
(c) 2018 Microsoft Corporation。保留所有权利。

C:\Users\WHY>cd /d e:\Test

e:\Test>type 1.txt
1
2
3
4
5
6
7
8
9
10
e:\Test>sort /+65535 1.txt
1
10
2
3
4
5
6
7
8
9

e:\Test>

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 发现大坑

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 00:02 , Processed in 0.024293 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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