批处理问题,高手请指点:
我写的一个批处理,用来分割文本文件,fgwj.bat,用法为fgwjd:\win\a.txt5就是把a.txt分割成五份,前四份行数相同,最后一个接受剩下的所有,几近平均...
我写的一个批处理,用来分割文本文件,fgwj.bat,用法为fgwj d:\win\a.txt 5
就是把a.txt 分割成五份,前四份行数相同,最后一个接受剩下的所有,几近平均分。
可是 老是存在错误……
文件内容如下:
@echo off
color 0a
mode con cols=60 lines=30
if not "%1"=="?" goto :pass
echo 文 件 名: fgwj.bat fen ge wen jian (分割文件)
echo 创建日期: 2012/12/23 周日
echo 功 能: 用于将文本文件分割成指定份数
echo 使用方法: 传入两个参数,一个是待分割文件,一个分割的个数
echo 参 数? ---显示以上文字
::zonghangs 总行数,得到的密码文本的总行数 fenhangs 分割后的每个文件行数
pause>nul
exit
:pass
setlocal enabledelayedexpansion
cls
if not exist %1 ( echo 文件不存在&pause>nul&exit )
if %2 leq 1 (
echo 分割份数不大于2
pause>nul
exit
)
call :qdmz %1 fname fx fdp fulln
call :jshs %1 zonghangs
set /a fenhangs=!zonghangs!/%2
for /f %%a in (%1) do (
echo %%a>%fdp%\%fname%-1%fx%
goto :outfor1
)
:outfor1
set /a ks=1
:outfor2
for /l %%a in (!ks!,1,%2) do (
if "%%a"=="1" (set skipn=1) else (set /a skipn=%%a*!fenhangs!-!fenhangs!)
set fengefile=%fdp%\%fname%-%%a%fx%
for /f "skip=%skipn%" %%c in (!fulln!) do ( ------------出错行,老提示此处不应该有" 有时又提示此处不该有skipn-------------------------------
set /a js+=1
set /a jiexian=!fenhangs!*%%a
if !js! geq !jiexian! (
set /a ks=%%a+1
goto :outfor2
)
echo %%c>>!fengefile!
)
)
goto :eof
:jshs
::计算行数 传入两个参数--文件和接收行数的变量
set /a n=0
for /f %%a in (%1) do (set /a n+=1)
set %2=!n!
goto :eof
::取得名字
:qdmz
set %2=%~n1
set %3=%~x1
set %4=%~dp1
set %5=%~f1
goto :eof 展开
就是把a.txt 分割成五份,前四份行数相同,最后一个接受剩下的所有,几近平均分。
可是 老是存在错误……
文件内容如下:
@echo off
color 0a
mode con cols=60 lines=30
if not "%1"=="?" goto :pass
echo 文 件 名: fgwj.bat fen ge wen jian (分割文件)
echo 创建日期: 2012/12/23 周日
echo 功 能: 用于将文本文件分割成指定份数
echo 使用方法: 传入两个参数,一个是待分割文件,一个分割的个数
echo 参 数? ---显示以上文字
::zonghangs 总行数,得到的密码文本的总行数 fenhangs 分割后的每个文件行数
pause>nul
exit
:pass
setlocal enabledelayedexpansion
cls
if not exist %1 ( echo 文件不存在&pause>nul&exit )
if %2 leq 1 (
echo 分割份数不大于2
pause>nul
exit
)
call :qdmz %1 fname fx fdp fulln
call :jshs %1 zonghangs
set /a fenhangs=!zonghangs!/%2
for /f %%a in (%1) do (
echo %%a>%fdp%\%fname%-1%fx%
goto :outfor1
)
:outfor1
set /a ks=1
:outfor2
for /l %%a in (!ks!,1,%2) do (
if "%%a"=="1" (set skipn=1) else (set /a skipn=%%a*!fenhangs!-!fenhangs!)
set fengefile=%fdp%\%fname%-%%a%fx%
for /f "skip=%skipn%" %%c in (!fulln!) do ( ------------出错行,老提示此处不应该有" 有时又提示此处不该有skipn-------------------------------
set /a js+=1
set /a jiexian=!fenhangs!*%%a
if !js! geq !jiexian! (
set /a ks=%%a+1
goto :outfor2
)
echo %%c>>!fengefile!
)
)
goto :eof
:jshs
::计算行数 传入两个参数--文件和接收行数的变量
set /a n=0
for /f %%a in (%1) do (set /a n+=1)
set %2=!n!
goto :eof
::取得名字
:qdmz
set %2=%~n1
set %3=%~x1
set %4=%~dp1
set %5=%~f1
goto :eof 展开
1个回答
2012-12-24
展开全部
1、首先确定变量%skipn% 不会出错
2 如果文件名变量!fulln!存在空格则会出错。
用下面方法处理 for /f "usebackq skip=%skipn%" %%c in ("!fulln!") do (
2 如果文件名变量!fulln!存在空格则会出错。
用下面方法处理 for /f "usebackq skip=%skipn%" %%c in ("!fulln!") do (
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询