Board logo

标题: [其他] 【已解决】split:按行分割文本后如何删除过渡文件 [打印本页]

作者: 思想之翼    时间: 2023-7-17 23:09     标题: 【已解决】split:按行分割文本后如何删除过渡文件

本帖最后由 思想之翼 于 2023-7-18 10:43 编辑
  1. %1@cmd /q /v:on /c %0 :
  2. split -l 10 a.txt $-
  3. 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

  1. 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七
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. split -l 100 D:\DATA\A.txt $-
  4. for /f "delims=" %%i in ('dir /a-d /b $-*') do set /a n+=1&ren %%i !n!.txt
  5. pause
复制代码
请教:若分割 D:\DATA\A.txt,结果输入D:\DATA\,上述代码如何指定输入路径?
作者: 77七    时间: 2023-7-25 21:17

本帖最后由 77七 于 2023-7-25 21:24 编辑

回复 5# 思想之翼


  
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. split -l 100 D:\DATA\A.txt $-
  4. for /f "delims=" %%i in ('dir /a-d /b $-*') do (
  5.         set /a n+=1
  6.         ren %%i !n!.txt
  7.         move /-y "!n!.txt" "D:\DATA\"
  8. )
  9. pause
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. split -l 100 D:\DATA\A.txt $-
  4. for /f "delims=" %%i in ('dir /a-d /b $-*') do (
  5. set /a n+=1
  6. move /-y "%%i" "D:\DATA\!n!.txt"
  7. )
  8. pause
复制代码





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