中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 我是学批处理的新手,有事请教大家...
作者:
标题: 我是学批处理的新手,有事请教大家... 上一主题 | 下一主题
xiaolai
初级用户




积分 49
发帖 19
注册 2007-9-4
状态 离线
『楼 主』:  我是学批处理的新手,有事请教大家... 使用 LLM 解释/回答一下

请问,如何利用批处理来选择性运行某条命令?就是说在里面已经写了命令了,我想通过按指定的键来运行,有高手可以教教小菜吗?
我觉得DOS批处理真的是样好东西,哎,昨天晚上才弄懂:和goto的命令...
自己写了个:
@echo off
:jun
explorer http://www.x-zhu.tk(我的站点)
goto jun

自己写的无限大开我的网站的批处理恶作剧...
DOS批处理的强大功能,让我爱不释手...


2007-11-1 11:31
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
leo1984
初级用户





积分 96
发帖 43
注册 2007-10-31
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

拿dos來捉弄別人不大好吧@@
我也是新手,但是你可以參考一下別人寫的指令
@echo off
::ver beat1.3
setlocal enabledelayedexpansion
mode con lines=26
color 1f
for /f "delims=" %%i in ("%0") do set cdname=%%~dpi
:star
cls
title 批次檔案改名
echo.
echo ==============================================================
echo.
echo 批次檔案改名 測試版
echo.
echo 歡迎使用,請選擇選項(1,2,3,4,5,6,7,8)
echo.
echo 1.簡單改名
echo 2.剔除字元
echo 3.加入字元
echo 4.取代字元
echo 5.改副檔名
echo 6.使用說明
echo 7.關於作者
echo 8.退 出
echo 9.設定路徑
echo 0.返回選單
echo.
echo 工作路徑:%cdname%
echo.
echo bbs.cn-dos.net
echo ==============================================================
echo.
set no=:
set /p no= 請選擇:
set "no=%no:"=%"
if "%no%"==":" goto star
if "%no%"=="1" goto 1
if "%no%"=="2" goto 2
if "%no%"=="3" goto 3
if "%no%"=="4" goto 4
if "%no%"=="5" goto 5
if "%no%"=="6" goto 6
if "%no%"=="7" goto 7
if "%no%"=="8" goto 8
if "%no%"=="9" goto 9
if "%no%"=="0" goto 0
goto star
:1
cls
title 批次檔案改名-簡單改名
echo.
echo ==============================================================
echo.
echo 批次檔案改名-簡單改名
echo.
echo 簡單改名:一般用於多集電視劇或是多個檔案批次改名。
echo 例 子:如:那天 颱風01.語 字.d-vb.rmvb
echo 結果為:01.rmvb
echo 注意事項:1。不接納檔名中出現多個「1」的檔案
echo 2。支援拖放檔案,拖放不用設定路徑
echo 3。如未設定路徑,使用默認路徑
echo.
echo 工作路徑:%cdname%
echo.
echo 8.退 出 9.設定路徑 0.返回選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
set oldname=:
set /p oldname= 請輸入舊的檔名(第一集):
set "oldname=%oldname:"=%"
if "%oldname%"==":" goto 1
if "%oldname%"=="8" goto 8
if "%oldname%"=="9" goto 9
if "%oldname%"=="0" goto 0
if "%oldname%"=="1" goto no
for /f "tokens=1* delims=1" %%i in ("%oldname%") do (
set name=%%~ni
set name1=%%~nj
set cdname=%%~dpi
)
if "%cdname%"=="" goto no
cd /d %cdname%
dir /s/b/a-d . |find "%oldname%" >nul|| goto no
echo %name1% |find "1" >nul && goto no
if "%name%"=="" goto no
if "%name:~-1%"=="0" set "name=%name:~0,-1%"
if "%name%"=="" goto no
if "%name:~-1%"=="0" set "name=%name:~0,-1%"
if "%name%"=="" goto no
for /f "usebackq delims=" %%i in (`dir /s/b/a-d .`) do (
set var=%%~nxi
set "var=!var:%name%=!"
ren "%%i" "!var!" >nul 2>nul
)
for /f "usebackq delims=" %%i in (`dir /s/b/a-d .`) do (
set var=%%~nxi
set "var=!var:%name1%=!"
ren "%%i" "!var!" >nul 2>nul
)
goto ok

:2
cls
title 批次檔案改名-剔除字元
echo.
echo ==============================================================
echo.
echo 批次檔案改名-剔除字元
echo.
echo 剔除字元:一般用於多個檔案批次剔除指定字串改名。
echo 例 子:如:那天 颱風01.語 字.d-vb.rmvb
echo 取代:vb
echo 結果:那天 颱風01.語 字.d-.rm
echo 注意事項:1。字串區分大小寫,支援取代空格
echo 2。剔除範圍內含檔案副檔名
echo 3。不支援特殊字元/\:*"?|<>
echo.
echo 工作路徑:%cdname%
echo.
echo 8.退 出 9.設定路徑 0.返回選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
set oldname=:
set /p oldname= 請輸入要剔除的字串(區分大小寫):
set "oldname=%oldname:"=%"
if "%oldname%"==":" goto 2
if "%oldname%"=="8" goto 8
if "%oldname%"=="9" goto 9
if "%oldname%"=="0" goto 0
dir /s/b/a-d . |find "%oldname%" >nul|| goto no
for /f "usebackq delims=" %%i in (`dir /s/b/a-d .`) do (
set var=%%~nxi
set "var=!var:%oldname%=!"
echo %%i |find "批次檔案改名.bat" >nul ||ren "%%i" "!var!" >nul 2>nul
)
goto ok

:3
cls
title 批次檔案改名-加入字元
echo.
echo ==============================================================
echo.
echo 批次檔案改名-加入字元
echo.
echo 加入字元:一般用於多個檔案批次加入指定字串改名。
echo 例 子:如:那天 颱風01.語 字.d-vb.rmvb
echo 加入:
echo 結果:那天 颱風01.語 字.d-vb.rmvb
echo 注意事項:1。字串區分大小寫,支援加入「 」「.」
echo 2。加入的字元都在原檔名首部
echo 3。不支援特殊字元/\:*"?|<>
echo.
echo 工作路徑:%cdname%
echo.
echo 8.退 出 9.設定路徑 0.返回選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
set newname=:
set /p newname= 請輸入要加入的字串:
set "newname=%newname:"=%"
if "%newname%"==":" goto 3
if "%newname%"=="8" goto 8
if "%newname%"=="9" goto 9
if "%newname%"=="0" goto 0
dir /s/b/a-d . |find /v "批次檔案改名.bat" >nul|| goto no
for /f "usebackq delims=" %%i in (`dir /s/b/a-d .`) do echo %%i |find "批次檔案改名.bat" >nul ||ren "%%i" "%newname%%%~nxi" >nul 2>nul
goto ok

:4
cls
title 批次檔案改名-取代字元
echo.
echo ==============================================================
echo.
echo 批次檔案改名-取代字元
echo.
echo 取代字元:一般用於多個檔案批次取代指定字串改名。
echo 例 子:如:那天 颱風01.語 字.d-vb.rmvb
echo 尋找:
echo 取代:
echo 結果:那天 颱風01.語 字.d-vb.rmvb
echo 注意事項:1。字串區分大小寫,支援取代「 」「.」
echo 2。取代範圍內含檔案副檔名
echo 3。不支援特殊字元/\:*"?|<>
echo.
echo 工作路徑:%cdname%
echo.
echo 8.退 出 9.設定路徑 0.返回選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
set oldname=:
set /p oldname= 請輸入要尋找的字串:
set "oldname=%oldname:"=%"
if "%oldname%"==":" goto 4
if "%oldname%"=="8" goto 8
if "%oldname%"=="9" goto 9
if "%oldname%"=="0" goto 0
echo.
set newname=:
set /p newname= 請輸入要取代的字串:
set "newname=%newname:"=%"
if "%newname%"==":" goto 4
if "%newname%"=="8" goto 8
if "%newname%"=="0" goto 0
dir /s/b/a-d . |find "%oldname%" >nul|| goto no
for /f "usebackq delims=" %%i in (`dir /s/b/a-d .`) do (
set var=%%~nxi
set "var=!var:%oldname%=%newname%!"
echo %%i |find "批次檔案改名.bat" >nul ||ren "%%i" "!var!" >nul 2>nul
)
goto ok

:5
cls
title 批次檔案改名-改副檔名
echo.
echo ==============================================================
echo.
echo 批次檔案改名-改副檔名
echo.
echo 修改後綴:一般用於多個檔案批次修改後綴(檔案副檔名)。
echo 例 子:如:那天 颱風01.語 字.d-vb.rmvb
echo 新副檔名:rm
echo 結果:那天 颱風01.語 字.d-vb.rm
echo 注意事項:1。字串區分大小寫,支援取代「 」「.」
echo 2。取代範圍只是檔案副檔名
echo 3。刪除副檔名請輸入空格
echo 3。不支援特殊字元/\:*"?|<>
echo.
echo 工作路徑:%cdname%
echo.
echo 8.退 出 9.設定路徑 0.返回選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
set newname=:
set /p newname= 請輸入新的副檔名:
set "newname=%newname:"=%"
if "%newname%"==":" goto 5
if "%newname%"=="8" goto 8
if "%newname%"=="9" goto 9
if "%newname%"=="0" goto 0
dir /s/b/a-d . |find /v "批次檔案改名.bat" >nul|| goto no
for /f "usebackq delims=" %%i in (`dir /s/b/a-d .`) do (
set var=%%~nxi
set "var=!var:%%~xi=.%newname%!"
echo %%i |find "批次檔案改名.bat" >nul ||ren "%%i" "!var!" >nul 2>nul ||ren "%%i" "%%~ni.%newname%"
)
goto ok

:6
cls
title 批次檔案改名-說明
echo.
echo ==============================================================
echo.
echo 批次檔案改名 測試版
echo.
echo 1.簡單改名:對於相對簡單、類似的檔案的改名。如:電視劇等
echo 2.剔除字元:剔除檔名中指定字元或字串
echo 3.加入字元:增加指定字元或字串在原檔名的首部
echo 4.取代字元:取代檔名中指定字元
echo 5.改副檔名:修改原檔案的副檔名
echo 6.使用說明:請將此程式放在需要改名檔案的目錄內使用
echo 7.關於作者:程式作者聯繫模式
echo 8.退 出:離開程式
echo 9.設定路徑:設定該程式工作路徑。默認為此程式所在路徑
echo 0.返回選單:返回程式主選單
echo.
echo 任意鍵返回主選單
echo.
echo bbs.cn-dos.net
echo ==============================================================
echo.
pause >nul
goto star

:7
cls
title 批次檔案改名-關於作者
echo.
echo ==============================================================
echo.
echo 批次檔案改名 測試版
echo.
echo 本軟體為免費軟體歡迎大家使用~!
echo 此軟體用批次處理寫成,軟體現在為測試階段,難免存在錯誤。
echo 歡迎大家提出寶貴意見,以便本人及時改進。
echo 本人不會寫程式,但是是個批次處理狂熱愛好者,希望和您交流。
echo 學習過程中得到大家不少說明,感謝willsort,namejm等等。
echo.
echo.
echo a9319751 zzlike@163.com QQ:5040366
echo.
echo 任意鍵返回主選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
pause >nul
goto star

:8
title 批次檔案改名-Good Luck
cls
echo.
echo ==============================================================
echo.
echo.
echo.
echo Good Luck
echo.
echo.
echo.
echo.
echo.
echo Bye~~
echo.
echo.
echo.
echo ==============================================================
echo.
ping -n 3 127.0.0.1 >nul
exit

:9
cls
title 批次檔案改名-設定路徑
echo.
echo ==============================================================
echo.
echo 批次檔案改名-設定路徑
echo.
echo 設定路徑:設定程式工作路徑。
echo 例 子:如:c:\windows
echo 結果:程式會在"c:\windows"目錄下工作
echo 包括子目錄。
echo 注意事項:1。直接換行字元使用目前工作路徑
echo 2。全部工作包括子目錄
echo 3。支援拖放目錄
echo.
echo 工作路徑:%cdname%
echo.
echo 8.退 出 9.設定路徑 0.返回選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
set /p cdname= 請輸入路徑:
set "cdname=%cdname:"=%"
if "%cdname%"=="8" goto 8
if "%cdname%"=="9" goto 9
if "%cdname%"=="0" goto 0
:if "%cdname:~-1%"=="\" set "cdname=%cdname:~0,-1%"
:for /f "delims=" %%i in ("%cdname%\") do set !cdname!=%%~dpi
if exist "%cdname%" (cd /d "%cdname%" >nul 2>nul && set "%cdname%=%cd%" || goto no) else goto no
goto star

:0
cls
goto star

:no
cls
title 批次檔案改名-錯誤資訊
echo.
echo ==============================================================
echo.
echo 批次檔案改名-錯誤資訊
echo.
echo 1。此檔案、路徑不存在或是不適合此模式改名
echo 2。或是您的輸入含有特殊字元/\:*"?|<>
echo 3。請嘗試其他模式
echo.
echo 工作路徑:%cdname%
echo.
echo 任意鍵返回主選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
pause >nul
goto star

:ok
cls
title 批次檔案改名-任務完成
echo.
echo ==============================================================
echo.
echo 批次檔案改名-任務完成
echo.
echo 1。恭喜,恭喜,全部任務已完成
echo 2。任意鍵開啟已完成工作目錄!
echo.
echo 工作路徑:%cdname%
echo.
echo 任意鍵返回主選單
echo.
echo. bbs.cn-dos.net
echo ==============================================================
echo.
pause >nul
start %cdname%
goto star


2007-11-1 11:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
jellylover
新手上路





积分 12
发帖 5
注册 2007-10-29
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

强......


2007-11-1 12:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xiaolai
初级用户




积分 49
发帖 19
注册 2007-9-4
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

先谢谢你,但还没回答我的问题呢...
我是求教拉...


2007-11-1 12:52
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xiaolai
初级用户




积分 49
发帖 19
注册 2007-9-4
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

版主快来吧,我等你帮帮我这个在沙漠里迷路的小菜吖...


2007-11-1 13:05
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

方法有很多,2楼的代码里面已经有几处了;
放上一个不太常用的方法吧,这个对于防范非法字符不错


@echo off

:INPUT
cls
set /p choice=输入(1,2,3,4):
set choice|findstr /i /r /x "choice=1" 1>nul 2>nul&&goto :C1
set choice|findstr /i /r /x "choice=2" 1>nul 2>nul&&goto :C2
set choice|findstr /i /r /x "choice=3" 1>nul 2>nul&&goto :C3
set choice|findstr /i /r /x "choice=4" 1>nul 2>nul&&goto :C4
goto :INPUT

:C1
echo 你输入了1
goto :END

:C2
echo 你输入了2
goto :END

:C3
echo 你输入了3
goto :END

:C4
echo 你输入了4
goto :END

:END
pause



Last edited by dikex on 2007-11-1 at 01:29 PM ]




正在潜水修练的批处理小白
2007-11-1 13:25
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: