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

[文本处理] 批处理FOR语句skip=!n!怎样可以实现?

for 语句中 比如  skip= tokens=  后面怎样才可以引用变量  比如 skip=!n!

回复 16# qixiaobin0715


  谢谢大佬指点!昨天在写代码的时候想用到 skip=!n!,发现失败,今天通过搜索找到的这个帖子。
  1. @echo off
  2. set n=1
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%b in ("=") do (
  5. cmd /q /c "for /f "skip=!n! delims=%%b" %%a in ('type "%~f0"') do echo %%a"
  6. )
  7. pause
复制代码


  1. @echo off
  2. for /d %%d in (*) do (
  3. cmd /q /c "for /r "%%d" %%i in (*) do echo %%i"
  4. )
  5. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 15# 77七
真有你的,把这么早的帖子给翻了出来。实际上可以换一个思路就没这么复杂,不使用skip而用more,!n!,%n%,%%a都可以适用:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,5) do (
  4. set /a n+=1
  5. for /f "delims=" %%b in ('more +!n! 123.txt') do echo,%%b
  6. )
  7. pause
复制代码

TOP

  1. @echo off
  2. set n=1
  3. setlocal enabledelayedexpansion
  4. cmd /q /c for /f "skip=!n! delims=" %%a in ('type "%~f0"') do echo %%a
  5. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 13楼 的帖子

使用参数变量,这个方法很巧妙啊

TOP

请看下面的示例:

  1. @echo off
  2. for /l %%a in (1,1,5) do call :lp %%a
  3. pause>nul&goto :eof
  4. :lp
  5. for /f "tokens=%1" %%a in ('tasklist') do echo %%a
复制代码
***共同提高***

TOP

我已经把set拿出来call了,似乎程序已然不认识%n%啊,只认!n!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l  %%a in (1,1,10) do (
  4.      call :_set
  5.      echo !n!
  6.      echo %n%
  7.      pause
  8.      for /f "delims=~ skip=!n!" %%i in (1.txt) do (echo %%i)
  9. )
  10. pause
  11. :_set
  12. set/a n=%random%%%3
  13. exit/b
复制代码

TOP

回复 8楼 的帖子

可以试试把它拿出来,call一下。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

老问题了,
for 。。。。。%%a in
不能用 !!引用变量,也不能用 for 的 %%i  变量。
技术问题请到论坛发帖求助!

TOP

这个可以从坛子里变量延迟的定义和开启原因上理解。

TOP

尝试了N次,才发现for里面参数如果使用变量延迟就出现错误,只支持%n%等普通变量。解决办法就是把赋值语句不放在复合语句中便可。

[ 本帖最后由 TX_kakashi 于 2010-9-16 22:09 编辑 ]

TOP

如果 使!n! 就提示错误啊

TOP

回复 5楼 的帖子

此时你的第2个for是套嵌在第一个for内,属于复合语句,你代码中的变量n是在复合语句中被赋值,所以在这里你必须要用变量延迟,也就是!n!。我之前所举得例子不属于复合语句,所以没必要用变量延迟。

TOP

@echo off
setlocal enabledelayedexpansion
for /l  %%a in (1,1,10) do (set n=!random! %% 3
     for /f "delims=~ skip=%n%" %%i in (1.txt) do (echo %%i)
)
pause
例如 此时 将无法实现

TOP

开变量延迟是个习惯,不过举得例子比较简单,不需要变量延迟,普通变量就可以用了。不过实际情况还是需要用到变量延迟的,lz自行修改一下便可。

TOP

返回列表