标题: [ 新手练习题 5 ] 文件与目录相互替换 [打印本页]
作者: wxcute 时间: 2009-6-18 12:52 标题: [ 新手练习题 5 ] 文件与目录相互替换
[ 新手练习题 5 ] 文件与目录相互替换
检测批处理所在目录是否存在 LOGFILE 文件/目录。
如果 LOGFILE 是文件,则用同名目录替换它;反之则用同名文件替换名为 LOGFILE 的目录。
如果都不存在则构造一个 0 字节的名为 LOGFILE 的文件。
注意:名字没有扩展名!
目的:了解文件/目录的存在特性,学会生成文件与创建目录。
要求:文件目录名称可自行修改。多次运行都要有效。
方法不限。
评分:代码可读性 1 分;
首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
一人可多种方法,新方法追加 2 分,已经出现过的方法追加 1 分。
作者: keen 时间: 2009-6-18 19:29
- @echo off
- set name=logfile
- if exist %name% (
- cd %name% 2>nul&&(cd..&rd %name%&cd.>%name%)||(del %name%&md %name%)
- ) else (cd.>%name%)
复制代码
作者: wangshuping42 时间: 2009-6-18 19:59
- @echo off
- if not exist logfile (cd.>logfile&pause&exit)
-
- :again
- cd logfile 2>nul
- if errorlevel 1 (goto 1)
- if errorlevel 0 (goto 0)
-
- :1
- del logfile
- md logfile
- pause>nul&goto again
-
- :0
- cd ..\
- rd /s /q logfile
- cd.>logfile
- pause>nul&goto again
复制代码
作者: tireless 时间: 2009-6-18 21:53
- @echo off
- set name="logfile"
- if not exist %name% exit/b>%name%
- if exist %name%\ rd/s/q %name% & exit/b>%name%
- del/a/f %name% & md %name%
复制代码
- @echo off
- set name="logfile"
- dir/a-d/b %name%>nul 2>nul&&del/a/f %name%&&md %name%||(rd/s/q %name% 2>nul&cd.>%name%)
复制代码
作者: inittab 时间: 2009-6-18 22:57
- @echo off
- set name="logfile"
- if exist %name% (rd /s/q %name% 2>nul&&cd.>%name%||del /a/f %name% 2>nul&&md %name%) else cd.>%name%
复制代码
作者: lovelymorning 时间: 2009-6-29 16:34
(type LOGFILE&&(del /q LOGFILE&md LOGFILE)||(rd /s /q LOGFILE&cd>LOGFILE))>nul 2>nul
if exist LOGFILE\ (rd /s /q LOGFILE&cd>LOGFILE) else (if exist LOGFILE (del /q LOGFILE&md LOGFILE) else (cd>LOGFILE))
作者: keen 时间: 2009-6-29 16:38 标题: 回复 6楼 的帖子
请学会使用code将代码括起来,这样既让你的代码美观,更易他人复制你的代码,谢谢!
Q:如何用code将代码括起来?
A:http://www.bathome.net/viewthread.php?tid=404&highlight=code
作者: lovelymorning 时间: 2009-7-10 22:02
为何不成功呢?
怎么我测试的,却是可以?- (type LOGFILE&&(del /q LOGFILE&md LOGFILE)||(rd /s /q LOGFILE&cd>LOGFILE))>nul 2>nul
复制代码
- if exist LOGFILE\ (rd /s /q LOGFILE&cd>LOGFILE) else (if exist LOGFILE (del /q LOGFILE&md LOGFILE) else (cd>LOGFILE))
复制代码
作者: keen 时间: 2009-7-10 22:44 标题: 回复 8楼 的帖子
楼主的题目要求生成0字节的文件。
你的代码只要把cd>LOGFILE
改成cd.>LOGFILE
作者: liuks001 时间: 2009-7-12 20:28
不晓得还有管理员在看这个帖子不!我是这几天才知道这个网站的! 也是新手 有些地方不太理解
比如:2>nul 是什么意思哦 我在几个批处理里面都看到 有 1>nul 2>nul 能解释一哈不!
作者: Batcher 时间: 2009-7-12 20:36 标题: 回复 10楼 的帖子
批处理中的重定向符号以及句柄的使用方法和讲解
http://bbs.bathome.net/thread-3296-1-1.html
作者: liuks001 时间: 2009-7-12 20:37
if exist %name% (
cd %name% 2>nul&&(cd..&rd %name%&cd.>%name%)||(del %name%&md %name%)
) else (cd.>%name%)
管理员能帮我解释一下这句话的意思吗?
作者: 风行者 时间: 2009-7-12 21:51
- @echo off
- if exist logfile (if exist logfile\nul (
- rd /s /q logfile & cd. >logfile) else (
- del logfile & md logfile)) else cd. >logfile
复制代码
作者: wxcute 时间: 2009-7-12 22:02 标题: 回复 12楼 liuks001 的帖子
请不要在回复中提不相关的问题,有什么问题请到相应版块发表新主题。谢谢合作。
作者: pumahxh 时间: 2009-11-10 22:03 标题: 回复 1楼 的帖子
@echo off&setlocal EnableDelayedExpansion
dir /a-d logfile >nul 2>nul
if %errorlevel%==0 (
del logfile
md logfile
) else (
dir /ad logfile >nul 2>nul
if !errorlevel!==0 (
rd/q logfile
cd.>logfile
) else (
cd.>logfile
)
)
pause
利用了dir里attrib的目录属性
找到另一种方法:
(md logfile || del /q logfile&md logfile || rd /q logfile & cd.>logfile)>nul 2>nul
[ 本帖最后由 pumahxh 于 2009-11-11 11:12 编辑 ]
作者: zgq0301 时间: 2009-11-12 19:09
- if exist logfile (
- rd logfile && echo. >logfile
- del logfile && md logfile
- ) else (
- echo. >logfile
- )
- pause
复制代码
问题:为何当logfile为目录时,我这段代码不能删除目录并创建文件呢?
[ 本帖最后由 zgq0301 于 2009-11-12 19:15 编辑 ]
作者: gxuan2008 时间: 2010-7-4 11:46
- @echo off
- cd logfile && cd..& rd /s/q logfile && cd.>logfile || del logfile && md logfile
- cls & exit
复制代码
作者: Hello123World 时间: 2011-7-28 12:59
本帖最后由 Hello123World 于 2011-7-28 13:09 编辑
这里有一个有趣的现象,批处理命令(也可能是cmd.exe本身)不能判断无扩展名的文件和文件夹的区别。- @echo off
- Md logfile 2>nul || fsutil file CreateNew logfile 0 &Rd logfile & exit
- fsutil file CreateNew logfile 0 || Md logfile 2>nul & del logfile &exit
- pause
- del logfile || rd logfile & fsutil file CreateNew logfile 0 & exit
- rd logfile || del logfile & md logfile & exit
复制代码
最终解决代码:- @echo off
- Set a=
- pushd "%~dp0"
- cd logfile && Set a=1 || Set a=0
- popd
- If %a%==1 rd logfile && fsutil File CreateNew logfile 0 & exit
- If %a%==0 del logfile && md logfile || fsutil File CreateNew logfile 0
- exit
- pause
复制代码
作者: scarcr 时间: 2011-8-4 16:57
回复 1# wxcute
这个用了不小的时间,差不点一个小时,学到了几点。
if exist 对目录同样有效,当文件不带扩展名时相当头痛,
因为一直使用肯定判断,导致不断出错。改用否定判断后,一次成功。
if errorlevel 要倒序使用,否则出错,原因我不知道。
经验:为程序每步+上echo 数字,if语句(尤其是多重判断)的运行流程一目了然,排查错误也方便许多,就是显得笨拙了一点。没办法,笨鸟先飞。- @echo off
- if not exist file (goto b) else (cd file)
- if errorlevel 1 (del file&md file&pause&goto :eof)
- if errorlevel 0 (cd..&rd file&goto b)
- :b
- cd.>file
- pause
复制代码
作者: changedirectory 时间: 2014-6-7 11:59
回复 1# wxcute - @echo off
- if exist logfile (
- for %%i in (logfile) do (
- if "%%~ai"=="--a------" echo logfile is File!&del "%%i"&md logfile
- if "%%~ai"=="d--------" echo logfile is Folder!&rd /s /q "%%i"&cd.>logfile
- ) else (
- cd.>logfile
- )
- pause
复制代码
- dir /ad /b|findstr /i "^logfile">nul 2>nul&&echo logfile是目录&&rd /s /q logfile&&cd.>logfile||dir /a-d /b|findstr /i "^logfile">nul 2>nul&&echo logfile是文件&&del logfile&&md logfile||cd.>logfile
-
- pause
复制代码
- @echo off&setlocal enabledelayedexpansion
- if not exist logfile cd.>logfile
- for /f "skip=5 tokens=3" %%i in ('dir /tc logfile') do (
- set /a m+=1
- if !m!==1 (
- if "%%i"=="<DIR>" (
- echo logfile is Folder&rd /s /q "logfile"&cd.>logfile
- ) else (
- echo logfile is File!&del "logfile"&md logfile
- )
-
- )
- )
- pause
复制代码
作者: Tamce 时间: 2014-6-9 09:04
回复 12# liuks001
>nul是重定向标准输出
2>nul是重定向错误输出
你可以试下以下代码来更好的了解他们的区别:- @echo off
- echo ^>nul
- cd abc>nul
- echo 2^>nul
- cd abc 2>nul
- pause
复制代码
前提是abc文件夹不存在。
应该是这样吧,昨天百度的。。
作者: zh_1452 时间: 2014-6-22 12:45
- @echo off
- cd..\..
- cd /d e:\.
- md logfile
- dir /s/a/w|more
- pause
- if exist e:\logfile (echo e盘下有logfile存在) else (echo e盘下不存在logfile)
- pause
- @echo off
- type nul>e:\logfile.txt
- pause
- @echo off
- cd..\..
- cd /d e:\.
- del e:\logfile.txt
- if exist e:\logfile (ren e:\logfile logfile.txt) else (echo c:\logfile.txt)
- pause
- @echo off
- cd..\..
- cd /d e:\.
- md logfile
- if exist e\logfile.txt (ren e:\logfile.txt logfile) else (echo c:\logfile)
- pause
- cd..\..
- cd /d e:\.&dir/s/a/w|more
- pause
复制代码
作者: daxin2014 时间: 2014-7-17 21:49
@echo off
::判断有没有logfile
if exist logfile (
if exist .\logfile\ (echo y|rmdir logfile
cd.>logfile) else (
del logfile
md logfile
)
) else (
cd.>logfile
)
::.\logfile\为判断是否为目录
pause
刚开始学习,上面好多代码还看不懂,就用自己的方法来做把
作者: 光绪爷 时间: 2014-7-27 13:57
- @echo off
- if exist logfile\ (rd logfile)&(cd.>logfile) else if exist logfile (del logfile)&(md logfile)
- if not exist logfile (if not exist logfile\ cd.>logfile)
- pause>nul
复制代码
作者: daxin2014 时间: 2014-8-25 21:30
回复 10# liuks001
>nul 重定向到空设备 就是不在屏幕上显示输出信息 2>nul 不显示错误的信息
作者: monsterbatch 时间: 2014-11-3 22:22
本帖最后由 monsterbatch 于 2014-11-3 22:25 编辑
- @echo off
-
- cd logfile 2>nul
-
- if errorlevel 1 goto :1
-
- if errorlevel 0 goto :0
-
- :1
- del logfile 2>nul
-
- md logfile&pause&exit
-
- :0
- cd..
-
- rd logfile
-
- cd.>logfile&pause&exit
复制代码
作者: shelluserwlb 时间: 2014-11-6 19:52
本帖最后由 shelluserwlb 于 2014-11-6 21:07 编辑
- @echo off
- dir /a-d /b|findstr "logfile">nul && (
- del logfile&md logfile&exit
- )
- dir /ad /b|findstr "logfile">nul && (
- rd logfile
- )
- cd.>logfile
复制代码
上述代码利用dir命令和findstr命令相结合来实现程序的功能。
先判断是否存在logfile文件,再判断是否存在logfile文件夹
最后利用cd.>重定向命令生成logfile文件。
作者: 唯尘 时间: 2024-1-23 11:45
@echo off
set name=logfile
if exist %name% (
cd %name%>nul 2>Nul && (cd .. & rd /s /q %name%>nul 2>Nul & cd.>%name%)||(del /s /q %name%>nul 2>Nul & md %name% & exit /b)
) else (exit /b>logfile)
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |