找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: wxcute

[ 新手练习题 5 ] 文件与目录相互替换

[复制链接]
发表于 2009-11-12 19:09:51 | 显示全部楼层
  1. if exist logfile (
  2.      rd logfile && echo. >logfile
  3.      del logfile && md logfile
  4. ) else (
  5.    echo. >logfile
  6. )
  7. pause
复制代码


问题:为何当logfile为目录时,我这段代码不能删除目录并创建文件呢?

[ 本帖最后由 zgq0301 于 2009-11-12 19:15 编辑 ]
发表于 2010-7-4 11:46:09 | 显示全部楼层
  1. @echo off
  2. cd logfile && cd..& rd /s/q logfile && cd.>logfile || del logfile && md logfile
  3. cls & exit
复制代码
发表于 2011-7-28 12:59:04 | 显示全部楼层
本帖最后由 Hello123World 于 2011-7-28 13:09 编辑

这里有一个有趣的现象,批处理命令(也可能是cmd.exe本身)不能判断无扩展名的文件和文件夹的区别。
  1. @echo off
  2. Md logfile 2>nul || fsutil file CreateNew logfile 0 &Rd logfile & exit
  3. fsutil file CreateNew logfile 0 || Md logfile 2>nul & del logfile &exit
  4. pause
  5. del  logfile || rd logfile & fsutil file CreateNew logfile 0 & exit
  6. rd logfile || del logfile & md logfile & exit
复制代码
最终解决代码:
  1. @echo off
  2. Set a=
  3. pushd "%~dp0"
  4. cd logfile && Set a=1 || Set a=0
  5. popd
  6. If %a%==1 rd logfile && fsutil File CreateNew logfile 0  & exit
  7. If %a%==0 del logfile && md logfile  || fsutil File CreateNew logfile 0
  8. exit
  9. pause
复制代码
发表于 2011-8-4 16:57:41 | 显示全部楼层
回复 1# wxcute

这个用了不小的时间,差不点一个小时,学到了几点。
if exist 对目录同样有效,当文件不带扩展名时相当头痛,
因为一直使用肯定判断,导致不断出错。改用否定判断后,一次成功。
if errorlevel 要倒序使用,否则出错,原因我不知道。
经验:为程序每步+上echo 数字,if语句(尤其是多重判断)的运行流程一目了然,排查错误也方便许多,就是显得笨拙了一点。没办法,笨鸟先飞。

  1. @echo off
  2. if not exist file (goto b) else (cd file)
  3. if errorlevel 1 (del file&md file&pause&goto :eof)
  4. if errorlevel 0 (cd..&rd file&goto b)
  5. :b
  6. cd.>file
  7. pause   
复制代码
发表于 2014-6-7 11:59:34 | 显示全部楼层
回复 1# wxcute

  1. @echo off
  2. if exist logfile (
  3.     for %%i in (logfile) do (
  4.            if "%%~ai"=="--a------" echo logfile is File!&del "%%i"&md logfile
  5.            if "%%~ai"=="d--------" echo logfile is Folder!&rd /s /q "%%i"&cd.>logfile
  6.   ) else (
  7.     cd.>logfile
  8.   )
  9. pause
复制代码

  1. 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

  2. pause
复制代码

  1. @echo off&setlocal enabledelayedexpansion
  2. if not exist logfile cd.>logfile
  3. for /f "skip=5 tokens=3" %%i in ('dir /tc logfile') do (
  4.    set /a m+=1
  5.    if !m!==1 (
  6.              if "%%i"=="<DIR>" (
  7.                      echo logfile is Folder&rd /s /q "logfile"&cd.>logfile
  8.              ) else (
  9.                echo logfile is File!&del "logfile"&md logfile
  10.              )
  11.      
  12.   )
  13. )
  14. pause
复制代码
发表于 2014-6-9 09:04:43 | 显示全部楼层
回复 12# liuks001

>nul是重定向标准输出
2>nul是重定向错误输出
你可以试下以下代码来更好的了解他们的区别:

  1. @echo off
  2. echo ^>nul
  3. cd abc>nul
  4. echo 2^>nul
  5. cd abc 2>nul
  6. pause
复制代码
前提是abc文件夹不存在。

应该是这样吧,昨天百度的。。
发表于 2014-6-22 12:45:56 | 显示全部楼层
  1. @echo off
  2. cd..\..
  3. cd /d e:\.
  4. md logfile
  5. dir /s/a/w|more
  6. pause
  7. if exist e:\logfile (echo e盘下有logfile存在) else (echo e盘下不存在logfile)
  8. pause
  9. @echo off
  10. type nul>e:\logfile.txt
  11. pause
  12. @echo off
  13. cd..\..
  14. cd /d e:\.
  15. del e:\logfile.txt
  16. if exist e:\logfile (ren e:\logfile logfile.txt) else (echo c:\logfile.txt)
  17. pause
  18. @echo off
  19. cd..\..
  20. cd /d e:\.
  21. md logfile
  22. if exist e\logfile.txt (ren e:\logfile.txt logfile) else (echo c:\logfile)
  23. pause
  24. cd..\..
  25. cd /d e:\.&dir/s/a/w|more
  26. pause
复制代码
发表于 2014-7-17 21:49:59 | 显示全部楼层
@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:14 | 显示全部楼层

  1. @echo off
  2. if exist logfile\ (rd logfile)&(cd.>logfile) else if exist logfile (del logfile)&(md logfile)
  3. if not exist logfile (if not exist logfile\ cd.>logfile)
  4. pause>nul
复制代码
发表于 2014-8-25 21:30:22 | 显示全部楼层
回复 10# liuks001


>nul 重定向到空设备 就是不在屏幕上显示输出信息   2>nul 不显示错误的信息
发表于 2014-11-3 22:22:53 | 显示全部楼层
本帖最后由 monsterbatch 于 2014-11-3 22:25 编辑

  1. @echo off

  2. cd logfile 2>nul

  3. if errorlevel 1 goto :1

  4. if errorlevel 0 goto :0

  5. :1
  6. del logfile 2>nul

  7. md logfile&pause&exit

  8. :0
  9. cd..

  10. rd logfile

  11. cd.>logfile&pause&exit
复制代码
发表于 2014-11-6 19:52:35 | 显示全部楼层
本帖最后由 shelluserwlb 于 2014-11-6 21:07 编辑
  1. @echo off  
  2. dir /a-d /b|findstr "logfile">nul && (
  3. del logfile&md logfile&exit
  4. )
  5. dir /ad /b|findstr "logfile">nul && (
  6. rd logfile
  7. )
  8. cd.>logfile
复制代码
上述代码利用dir命令和findstr命令相结合来实现程序的功能。
先判断是否存在logfile文件,再判断是否存在logfile文件夹
最后利用cd.>重定向命令生成logfile文件。
发表于 2024-1-23 11:45:50 | 显示全部楼层
@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)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:25 , Processed in 0.020429 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表