标题: [其他] 【已解决】split:按行分割文本后如何删除过渡文件 [打印本页]
作者: 思想之翼 时间: 2023-7-17 23:09 标题: 【已解决】split:按行分割文本后如何删除过渡文件
本帖最后由 思想之翼 于 2023-7-18 10:43 编辑
- %1@cmd /q /v:on /c %0 :
- split -l 10 a.txt $-
- for /f "delims=" %%i in ('dir /a-d /b $-*') do set /a n+=1&ren %%i !n!.txt
复制代码
上述代码每10行分割为一个文件,代码运行时,文件夹内依次出现 !n!,$-ab,$-ac ...等过渡文件,代码运行结束后并不删除这些过渡文件。如何解决该问题?
作者: WHY 时间: 2023-7-18 08:14
应该是变量延迟开启失败,导致重命名失败。
第一行是开启变量延迟,
第一行不运行的原因我猜可能是:脚本含中文且为UTF8编码。
作者: 77七 时间: 2023-7-18 09:45
延迟环境变量扩展特性在CMD中缺省是关闭的,开启它的方法目前有两个:一是CMD /vff(此处说法有误,应为 CMD /vn——namejm 注),它会打开一个新的命令行外壳,在使用exit退出这个外壳之前,扩展特性始终有效,常用于命令行环境中;二是setlocal EnableDelayedExpansion,它会使环境变量的修改限制到局部空间中,在endlocal之后,扩展特性和之前对环境变量的修改将一同消失,常用于批处理语句中。
http://bbs.bathome.net/thread-112-1-1.html
我学习了一下这个代码,这个可能多数用在命令行中,命令写成一行,这里使用 /c 并没有退出批处理脚本,导致第2、3行重复执行,产生$-*文件,重复执行时没有开启延迟变量扩展,所以产生了 !n!.txt
可以在脚本末尾加个exit 退出
或者直接去掉第一行,使用setlocal EnableDelayedExpansion开启延迟变量扩展好了
作者: 77七 时间: 2023-7-18 10:45
- cmd /q /v:on /c split -l 10 a.txt $- ^& for /f "delims=" %%i in ('dir /a-d /b $-*') do set /a n+=1^&ren %%i !n!.txt
复制代码
参考了buyiyang大佬的分享 http://www.bathome.net/viewthread.php?tid=66195 ,改为一行
作者: 思想之翼 时间: 2023-7-25 20:56
回复 3# 77七 - @echo off
- setlocal enabledelayedexpansion
- split -l 100 D:\DATA\A.txt $-
- for /f "delims=" %%i in ('dir /a-d /b $-*') do set /a n+=1&ren %%i !n!.txt
- pause
复制代码
请教:若分割 D:\DATA\A.txt,结果输入D:\DATA\,上述代码如何指定输入路径?
作者: 77七 时间: 2023-7-25 21:17
本帖最后由 77七 于 2023-7-25 21:24 编辑
回复 5# 思想之翼
- @echo off
- setlocal enabledelayedexpansion
- split -l 100 D:\DATA\A.txt $-
- for /f "delims=" %%i in ('dir /a-d /b $-*') do (
- set /a n+=1
- ren %%i !n!.txt
- move /-y "!n!.txt" "D:\DATA\"
- )
- pause
复制代码
- @echo off
- setlocal enabledelayedexpansion
- split -l 100 D:\DATA\A.txt $-
- for /f "delims=" %%i in ('dir /a-d /b $-*') do (
- set /a n+=1
- move /-y "%%i" "D:\DATA\!n!.txt"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |