标题: [文件操作] [已解决]请教下批处理的参数arg [打印本页]
作者: zhanglei1371 时间: 2017-7-29 20:00 标题: [已解决]请教下批处理的参数arg
本帖最后由 zhanglei1371 于 2017-7-30 15:56 编辑
看到论坛有高人的代码:- @echo off & setlocal enabledelayedexpansion
- if "%~1" == "arg" (
- for /r %%i in (*:*年*.pdf) do (
- for /f "tokens=1,2 delims=:年" %%j in ("%%~ni") do (
- set "s=%%j"
- echo;!s:~0,6!/%%k/!s:~6!/%%i
- )
- )
- ) else (
- set "s="
- for /f "tokens=1,3* delims=/" %%i in ('"%~f0" arg ^| sort /r ') do (
- if not "%%i" == "!s!" set "fd=%%i%%j"
- set "s=%%i"
- md "!fd!"
- move "%%k" "!fd!\"
- ) 2>nul
- for /d %%i in (*) do rd "%%i" 2>nul
- pause
- )
复制代码
想了解下,arg参数的用法在哪里能学习到?尝试加了几个echo,发现什么也没有显示:- for /f "tokens=* " %%i in ('"%~f0" arg ^| sort /r ') do (
- echo %%i
- )
- pause
复制代码
不知该如何查看里面的变量?
原贴:
http://www.bathome.net/thread-43880-1-1.html
作者: Batcher 时间: 2017-7-29 20:31
就是一个普通的位置参数,你把它改成 bathome 也能执行。
首次执行代码的时候,位置变量 %1 为空,第二行的 if 判断不成立,于是执行第九行 else 里面的语句块。
第11行 %~f0 arg 调用批处理文件本身,并设置位置参数的值为:arg
重新执行到第二行的时候,if 判断成立,执行第三行的 for 循环。
作者: 0000 时间: 2017-7-29 20:36
2333333333333333333333333这就是不好好看源码的后果
其实%~f0是指当前批处理的完整路径(call/?)
而"%~f0" arg就是以"arg"作为参数使用
上文中提到了if "%~1"=="arg"就是判断这个参数
作者: zhanglei1371 时间: 2017-7-29 21:25
就是一个普通的位置参数,你把它改成 bathome 也能执行。
首次执行代码的时候,位置变量 %1 为空,第二行 ...
Batcher 发表于 2017-7-29 20:31
谢谢解惑,明白了不少,不过还有个问题,就是重新执行时,第6行的echo为何不会显示?我自己加个echo和pause,发现也不会显示,是否无法查看这里的值?
作者: Batcher 时间: 2017-7-29 21:28
回复 4# zhanglei1371 - @echo off & setlocal enabledelayedexpansion
- if "%~1" == "arg" (
- for /r %%i in (*:*年*.pdf) do (
- echo %%i REM 先查看这里有没有取到文件名
- for /f "tokens=1,2 delims=:年" %%j in ("%%~ni") do (
- set "s=%%j"
- echo !s! REM 再看看这里有没有取到文件名
- echo;!s:~0,6!/%%k/!s:~6!/%%i
- )
- )
- )
复制代码
作者: zhanglei1371 时间: 2017-7-29 22:17
回复 zhanglei1371
Batcher 发表于 2017-7-29 21:28
试了下,好像都和"echo;!s:~0,6!/%%k/!s:~6!/%%i"这句一样,都显示不出来.....
作者: Batcher 时间: 2017-7-30 09:35
回复 6# zhanglei1371
可能是没有符合 *:*年*.pdf 这个条件的文件吧
作者: zhanglei1371 时间: 2017-7-30 15:57
回复 zhanglei1371
可能是没有符合 *:*年*.pdf 这个条件的文件吧
Batcher 发表于 2017-7-30 09:35
谢谢,大致已明白。这个类似于管道。单独拿出来就可以调试结果了。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |