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

[ 新手习题 7 ] 批处理显示文件扩展名

把一个文件拖放到批处理图标上,显示出文件的扩展名(不含点)
1、不考虑无扩展名的情况
2、增加点难度:还是只拖放一个,但可能是目录,还要考虑无扩展名的情况

如:文件名为 “美女.jpg”,显示:jpg
  目录名为 “AUTORUN.INF”,显示:INF
  文件名为 “DateBase”,显示:无扩展名

目的:了解何为参数,掌握带参数批处理文件写法。

要求:显示去掉点的扩展名,会做第一题也可以亮出代码。
   方法不限。

评分:代码可读性 1 分;
   首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。

@echo off
set var=%1
if exist %~1\ (echo 您选择的是一个文件夹) else (echo 文件扩展名是 %~x1)
pause>nul

TOP

@echo off
set var=%~x1
echo %var:~1%
pause>nul

TOP

@echo off
for /f "tokens=2 delims=." %%a in ("%~nx1") do if not "%~nx1"=="%~x1" echo %%a
pause>nul

TOP

  1. @echo off
  2. set var=无扩展名%~x1
  3. echo %var:*.=%
  4. pause
复制代码
1

评分人数

    • wxcute: 也是替换法,很巧妙。补上加分。PB + 5

TOP

  1. @echo off
  2. cd %1 2>nul||(call :file %1&pause&exit)
  3. for /r "%~1" %%a in (*.*) do call :file "%%~a"
  4. pause&exit
  5. :file
  6. (for /f "delims=." %%i in ("%~x1") do echo %%i)||echo 无扩展名
  7. goto :eof
复制代码
1

评分人数

    • wxcute: 加分有点晚了,不过还是补上。 与题意有 ...PB + 2

TOP

try

  1. @echo off
  2. set a=%~x1
  3. if  defined a (echo %a:.=%) else echo 没有扩展名
  4. pause>nul
复制代码
1

评分人数

    • wxcute: 用的是替换法,很好。PB + 6

TOP

简洁一下:
  1. @echo off
  2. set b=%~x1
  3. set c=%b:~1%
  4. if not "%b%"=="" (echo %c% &pause) else (echo 无扩展名!&pause)
复制代码
1

评分人数

(*^_^*)

TOP

  1. @echo off
  2. set /p a=请将文件拖放到这里:
  3. call :1 %a%
  4. pause &exit
  5. :1
  6. set b=%~x1
  7. set c=%b:~1%
  8. if not "%b%"=="" (echo %c%) else (echo 无扩展名!)
复制代码

[ 本帖最后由 keen 于 2009-3-31 10:15 编辑 ]
1

评分人数

(*^_^*)

TOP

过来凑热闹~

  1. @echo off
  2. set "var=%~x1%%无扩展名"
  3. call echo %var:~1,4%
  4. pause
复制代码

[ 本帖最后由 pusofalse 于 2008-12-5 22:21 编辑 ]
2

评分人数

    • wxcute: 有点取巧,不过遇到扩展名除点外有四个字符 ...PB + 2
    • youxi01: 不错PB + 6
心绪平和,眼藏静谧。

TOP

  1. @IF NOT DEFINED DEBUG @ECHO OFF
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. IF "%~X1"=="" ( ECHO 无扩展名 ) ELSE (
  4. SET "VAR=%~X1"
  5. ECHO !VAR:~1!
  6. )
复制代码
1

评分人数

    • wxcute: 拖放到批处理上最好 pause 暂停下,要在黑框 ...PB + 4

TOP

试下手
  1. @echo off
  2. set a=%~x1
  3. set b=%a:~1%
  4. if not %~nx1==%~n1 (echo %b%) else  echo 无扩展名
  5. pause
复制代码
1

评分人数

    • wxcute: 不错,就是没防住空格PB + 5

TOP

  1. @echo off
  2. (for /f "delims=." %%a in ("%~x1") do echo %%a) || echo 无扩展名
  3. pause
复制代码
1

评分人数

TOP

返回列表