标题: [其他] 求助批处理中执行del /q/f命令语句后不再执行后续命令是什么原因? [打印本页]
作者: yunyan100 时间: 2016-7-4 23:42 标题: 求助批处理中执行del /q/f命令语句后不再执行后续命令是什么原因?
本帖最后由 pcl_test 于 2016-7-5 13:38 编辑
各位前辈好,本人菜鸟一名, 喜欢捣鼓,根据在网上的资料, 写了如下一段代码,功能 已经 达到, 但在这 过程中有一个疑问, 被 它折磨了很久, 后面突然灵机一动, 一个&就解决了,就是:del /q/f命令执行后,后面的命令 不能 连续执行,需用&连接才行, 但 后面 两条del又不需要,想知道 是 为什么,请各位解惑,谢谢.- @echo off
- title 文件移动/复制功能
- rem 根据ROBOCOPY 参数不同,功能不同,当前功能为将当前目录下的所有文件复制至指定并删除当前目录的所有文件
- rem by 1145846856
-
- set pa=H:\files
-
- copy 移动目录下的文件.bat %temp%
- ROBOCOPY %~dp0 *.* %pa% /s
- for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
- del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
- del /q/f %pa%\移动目录下的文件.bat
- del /q/f %temp%\移动目录下的文件.bat
- ping 127.0.0.1 -n 6 >%temp%\null
- del %temp%\null
复制代码
下面是改进版,本来想直接在if 语句里给变量赋值, 就可以省很多代码,但是 值传不出来,不知何解- cho off
- title 文件移动/复制功能
- rem 根据ROBOCOPY 参数不同,功能不同,当前功能为将当前目录下的所有文件复制至指定并删除当前目录的所有文件
- rem by 1145846856
-
- set pa=H:\files
- echo.
- echo.
- @set /p inpa=当前默认目标目录是:%pa%,如需修改请直接输入按回车,不更改直接回车
-
- if "%inpa%" =="" (
- goto 1
- )else (goto 2
- )
-
-
- :1
- copy 移动目录下的文件.bat %temp%
- ROBOCOPY %~dp0 *.* %pa% /s
- for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
- del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
- del /q/f %pa%\移动目录下的文件.bat
- del /q/f %temp%\移动目录下的文件.bat
- ping 127.0.0.1 -n 3 >%temp%\null
- del %temp%\null
- exit
-
- :2
- set pa=%inpa%
- copy 移动目录下的文件.bat %temp%
- ROBOCOPY %~dp0 *.* %pa% /s
- for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
- del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
- del /q/f %pa%\移动目录下的文件.bat
- del /q/f %temp%\移动目录下的文件.bat
- ping 127.0.0.1 -n 3 >%temp%\null
- del %temp%\null
- exit
复制代码
作者: gawk 时间: 2016-7-5 19:21
del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
第一段代码第11行存在逻辑错误。
执行到这一行的时候该批处理文件本身被删掉,后面的命令自然无法执行。
你试试把它放到最后一行吧。
作者: yunyan100 时间: 2016-7-5 23:12
本帖最后由 yunyan100 于 2016-7-6 16:42 编辑
回复 2# gawk
hi,我也明白del /q/f * 这 个是删除 全部, 包括批处理自己,所以后面的命令是把复制到temp目录下的再复制回来, 我的意思是- del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
复制代码
如果改为- del /q/f *
- copy %temp%\移动目录下的文件.bat %~dp0
复制代码
后就在 执行del /q/f * 后不执行 后面的语句,必须要和它放同一行,这样才能执行 呢, 就是想知道原因
因为没有合适的 删除时排除某些文件,所以才用 全删 再复制回来的 方式- @echo off
- title 文件移动/复制功能
- rem 根据ROBOCOPY 参数不同,功能不同,当前功能为将当前目录下的所有文件复制至指定并删除当前目录的所有文件
- rem by 1145846856
-
- set pa=H:\files
- set "fi=*.bat|*.txt|*.zip"
-
- echo.
- echo.
- copy 移动目录下的文件.bat %temp%
- @set /p inpa=当前默认目标目录是:%pa%,如需修改请直接输入按回车,不更改直接回车
-
- if "%inpa%" =="" (
- goto dd
- )else (set pa=%inpa% & goto dd
- )
-
-
- :dd
- for /f "delims=| tokens=1-26" %%a in ("%fi%") do (
- set aa=%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r %%s %%t %%u %%v %%w %%x %%y %%z
- )
- ROBOCOPY %~dp0 *.* %pa% /s /xf %aa%
-
- for /f "delims=" %%a in ('dir/ad/b') do rd /s/q "%%~a"
- del /q/f * & copy %temp%\移动目录下的文件.bat %~dp0
- del /q/f %temp%\移动目录下的文件.bat
- ping 127.0.0.1 -n 5 >%temp%\null
- del %temp%\null
- exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |