标题: [文件操作] [已解决]检查 bat脚本for 语法规范 [打印本页]
作者: GNGW 时间: 2024-3-6 10:45 标题: [已解决]检查 bat脚本for 语法规范
本帖最后由 GNGW 于 2024-3-7 14:30 编辑
- @echo off
- setlocal enabledelayedexpansion
-
- for /f "skip=1 tokens=1,2" %%d in ('wmic logicaldisk get deviceid^, drivetype') do (
- if "%%e"=="3" (
- rem 过滤出固定驱动器(忽略A:和B:这样的软盘或光驱)
- if /i not "%%d"=="A:" if /i not "%%d"=="B:" (
- echo 正在遍历驱动器: %%d
- for /r "%%d\" %%i in (*.xlsx) do (
- echo xxxxxxxxxxxxxxxxxxx
- pause
- set "oldname=%%i"
- set "newname=%%~dpi%%~ni.xls"
- move "!oldname!" "!newname!"
- echo "文件扩展名已更改: !oldname! -> !newname!"
- )
- )
- )
- )
- endlocal
- echo 所有文件扩展名更改完成
- pause
复制代码
代码如上,第二个for循环进不去xxxxxxxxxxxxxxxxxxx 行打印不了 后面的pause也无法暂停,%%d和%%e这两个参数都没问题,都能正常打印,我猜可能for 循环的“%%d\” 这个位置出了问题,或者是什么for循环语法规范的问题。
作者: 77七 时间: 2024-3-6 12:11
是的,可以改用for /f +dir ,或者用pushd 进入目录再for /r,或者用call ,for /r "%~1",论坛内很多帖子都讨论过这个问题。
作者: 77七 时间: 2024-3-6 12:19
- @echo off
- for /f "skip=1 tokens=1,2" %%d in ('wmic logicaldisk get deviceid^, drivetype') do (
- if "%%e"=="3" (
- if /i not "%%d"=="A:" (
- if /i not "%%d"=="B:" (
- echo 正在遍历驱动器: %%d
- pushd "%%d\"
- for /r %%i in (*.xlsx) do (
- ren "%%i" "%%~ni.xls"
- )
- popd
- )
- )
- )
- )
- echo 所有文件扩展名更改完成
- pause
复制代码
楼主的每一行末尾几乎都有两个空格,有时候会出错,而且不容易发现,尤其在 set 设置变量的时候
作者: GNGW 时间: 2024-3-6 13:41
解决办法:http://www.bathome.net/redirect. ... 7714&pid=275507
作者: GNGW 时间: 2024-3-7 15:23
是的,可以改用for /f +dir ,或者用pushd 进入目录再for /r,或者用call ,for /r "%~1",论坛内很多帖子都 ...
77七 发表于 2024-3-6 12:11
for /f +dir 怎么使用?for /f 不允许递归命令的结果为参数
作者: 77七 时间: 2024-3-7 15:51
回复 5# GNGW
- for /f "delims=" %%i in ('dir /b /s /a-d "c:\*.xlsx"') do echo %%i
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |