标题: [文件操作] 批处理脚本求优化?运行一天一夜了还没开始操作。。。 [打印本页]
作者: 541622092 时间: 2022-5-8 01:47 标题: 批处理脚本求优化?运行一天一夜了还没开始操作。。。
批处理是把指定文件夹里面的txt文件,按文件名称的第一字符放入对应的文件夹
文件夹里面有四百多万个txt,执行下面批处理已经一天一夜了,还没开始移动
求大侠看下,是否能优化?- @echo off&setlocal enabledelayedexpansion
-
- for /f "delims=" %%i in ('dir /b /a-d "e:\web\img\*.txt"') do (
- set str=%%i
- set folder=!str:~0,1!
- md "!folder!" 2>nul
- move /y "%%i" "!folder!" >nul
- )
复制代码
作者: Batcher 时间: 2022-5-8 11:36
回复 1# 541622092
思路是根据文件名的规律分开处理,例如:
先处理字母a开头的文件,再处理字母b开头的文件......
作者: aloha20200628 时间: 2022-5-8 11:42
试一试将 dir 简报移出 for...in ()
@echo off
cd /d e:\web\img
dir /b/a-d *.txt>alltxt.lst
setlocal enabledelayedexpansion
for /f "delims=" %%F in (alltxt.lst) do (
set "nF=%%F" & set "folder=!nF:~,1!"
if not exist "!folder!" (md "!folder!")
move /y !nF! "!folder!">nul
)
endlocal & del/q alltxt.lst
作者: aloha20200628 时间: 2022-5-8 11:53
订正》文件名如有空格须用双引号包裹
@echo off
cd /d e:\web\img
dir /b/a-d *.txt>alltxt.lst
setlocal enabledelayedexpansion
for /f "delims=" %%F in (alltxt.lst) do (
set "nF=%%F" & set "folder=!nF:~,1!"
if not exist "!folder!" (md "!folder!")
move /y "!nF!" "!folder!">nul
)
endlocal & del/q alltxt.lst
作者: yakeyun 时间: 2022-5-8 14:48
本帖最后由 yakeyun 于 2022-5-8 14:52 编辑
回复 1# 541622092 - @echo off&setlocal enabledelayedexpansion
- for /f %%i in ('dir /a /s /b "e:\web\img\*.txt"') do (
- set dvn=%%i
- set str=%%~ni
- set folder=!str:~0,1!
- md "!folder!" 2>nul
- move /y "!dvn!" "!folder!" >nul
- )
- exit
复制代码
你之前的moved对象(%%i)只是一个文件名称,并没有路径,所以代码执行时存在找不到对象的情况。
作者: 541622092 时间: 2022-5-8 15:39
感谢以上各位的帮助,脚本开始工作了,感谢!
作者: hlzj88 时间: 2022-5-8 15:49
如果txt文件名是字母的可以这样- for /f %%i in (a b c 省略26个字母) do md %%i&&move /y "e:\web\img\%%i*.txt" %%i\
复制代码
如果txt文件名是汉字的,可以这样,代码借用aloha20200628的源码,进行了修改
这样的目的是找到一个字,把开头含这个字的所有txt一次全部移动。我写代码一次成功率不高,没有测试。- @echo off&setlocal enabledelayedexpansion
- cd /d e:\web\img
- del /q *.lst>nul 2>nul
- dir /b/a-d *.txt>>alltxt.lst
-
- :xh
- for /f "delims=" %%F in (alltxt.lst) do (
- set "nF=%%F" & set "folder=!nF:~,1!"
- if not exist "!folder!" (md "!folder!")
- move /y "!folder!*.txt" "!folder!\">nul
- findstr /v /ibc:"!folder!" alltxt.lst>>yu.lst
- move /y yu.lst alltxt.lst>nul
- goto xh
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |