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

[其他] 【已解决】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 ...等过渡文件,代码运行结束后并不删除这些过渡文件。如何解决该问题?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

应该是变量延迟开启失败,导致重命名失败。
第一行是开启变量延迟,
第一行不运行的原因我猜可能是:脚本含中文且为UTF8编码。
1

评分人数

TOP

延迟环境变量扩展特性在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开启延迟变量扩展好了
1

评分人数

    • 思想之翼: 改用setlocal EnableDelayedExpansion,解决 ...技术 + 1
bat小白,请多指教!谢谢!

TOP

  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 ,改为一行
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 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\,上述代码如何指定输入路径?

TOP

本帖最后由 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
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

返回列表