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

[文件操作] [已解决]请教下批处理的参数arg

本帖最后由 zhanglei1371 于 2017-7-30 15:56 编辑

看到论坛有高人的代码:
  1. @echo off & setlocal enabledelayedexpansion
  2. if "%~1" == "arg" (
  3.     for /r %%i in (*:*年*.pdf) do (
  4.         for /f "tokens=1,2 delims=:年" %%j in ("%%~ni") do (
  5.             set "s=%%j"
  6.             echo;!s:~0,6!/%%k/!s:~6!/%%i
  7.         )
  8.     )
  9. ) else (
  10.     set "s="
  11.     for /f "tokens=1,3* delims=/" %%i in ('"%~f0" arg ^| sort /r ') do (
  12.        if not "%%i" == "!s!" set "fd=%%i%%j"
  13.        set "s=%%i"
  14.        md "!fd!"
  15.        move "%%k" "!fd!\"
  16. ) 2>nul
  17.     for /d %%i in (*) do rd "%%i" 2>nul
  18.     pause
  19. )
复制代码
想了解下,arg参数的用法在哪里能学习到?尝试加了几个echo,发现什么也没有显示:
  1. for /f "tokens=* " %%i in ('"%~f0" arg ^| sort /r ') do (
  2. echo %%i
  3. )
  4. pause
复制代码
不知该如何查看里面的变量?
原贴:
http://www.bathome.net/thread-43880-1-1.html
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

就是一个普通的位置参数,你把它改成 bathome 也能执行。

首次执行代码的时候,位置变量 %1 为空,第二行的 if 判断不成立,于是执行第九行 else 里面的语句块。
第11行 %~f0 arg 调用批处理文件本身,并设置位置参数的值为:arg
重新执行到第二行的时候,if 判断成立,执行第三行的 for 循环。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

2333333333333333333333333这就是不好好看源码的后果

其实%~f0是指当前批处理的完整路径(call/?)
而"%~f0" arg就是以"arg"作为参数使用
上文中提到了if "%~1"=="arg"就是判断这个参数

TOP

就是一个普通的位置参数,你把它改成 bathome 也能执行。

首次执行代码的时候,位置变量 %1 为空,第二行 ...
Batcher 发表于 2017-7-29 20:31

谢谢解惑,明白了不少,不过还有个问题,就是重新执行时,第6行的echo为何不会显示?我自己加个echo和pause,发现也不会显示,是否无法查看这里的值?

TOP

回复 4# zhanglei1371
  1. @echo off & setlocal enabledelayedexpansion
  2. if "%~1" == "arg" (
  3.     for /r %%i in (*:*年*.pdf) do (
  4.         echo %%i REM 先查看这里有没有取到文件名
  5.         for /f "tokens=1,2 delims=:年" %%j in ("%%~ni") do (
  6.             set "s=%%j"
  7.             echo !s! REM 再看看这里有没有取到文件名
  8.             echo;!s:~0,6!/%%k/!s:~6!/%%i
  9.         )
  10.     )
  11. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  zhanglei1371
Batcher 发表于 2017-7-29 21:28


试了下,好像都和"echo;!s:~0,6!/%%k/!s:~6!/%%i"这句一样,都显示不出来.....

TOP

回复 6# zhanglei1371


    可能是没有符合 *:*年*.pdf 这个条件的文件吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  zhanglei1371


    可能是没有符合 *:*年*.pdf 这个条件的文件吧
Batcher 发表于 2017-7-30 09:35


谢谢,大致已明白。这个类似于管道。单独拿出来就可以调试结果了。

TOP

返回列表