标题: [文本处理] 批处理FOR语句skip=!n!怎样可以实现? [打印本页]
作者: edmond 时间: 2010-9-16 16:27 标题: 批处理FOR语句skip=!n!怎样可以实现?
for 语句中 比如 skip= tokens= 后面怎样才可以引用变量 比如 skip=!n!
作者: TX_kakashi 时间: 2010-9-16 18:11
直接用就行.- @echo off&setlocal enabledelayedexpansion
- set aaa=1
- set bb=2
- for /f "skip=%aaa% tokens=%bb%" %%i in (test.txt) do echo %%i
- pause
复制代码
作者: edmond 时间: 2010-9-16 19:04
谢谢,但是 为什么 变量延迟开启后不是 !!呢?
作者: TX_kakashi 时间: 2010-9-16 19:50
开变量延迟是个习惯,不过举得例子比较简单,不需要变量延迟,普通变量就可以用了。不过实际情况还是需要用到变量延迟的,lz自行修改一下便可。
作者: edmond 时间: 2010-9-16 20:20
@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
例如 此时 将无法实现
作者: TX_kakashi 时间: 2010-9-16 21:36 标题: 回复 5楼 的帖子
此时你的第2个for是套嵌在第一个for内,属于复合语句,你代码中的变量n是在复合语句中被赋值,所以在这里你必须要用变量延迟,也就是!n!。我之前所举得例子不属于复合语句,所以没必要用变量延迟。
作者: edmond 时间: 2010-9-16 21:44
如果 使!n! 就提示错误啊
作者: TX_kakashi 时间: 2010-9-16 22:06
尝试了N次,才发现for里面参数如果使用变量延迟就出现错误,只支持%n%等普通变量。解决办法就是把赋值语句不放在复合语句中便可。
[ 本帖最后由 TX_kakashi 于 2010-9-16 22:09 编辑 ]
作者: bluewing009 时间: 2010-9-17 00:08
这个可以从坛子里变量延迟的定义和开启原因上理解。
作者: 随风 时间: 2010-9-17 02:11
老问题了,
for 。。。。。%%a in
不能用 !!引用变量,也不能用 for 的 %%i 变量。
作者: Batcher 时间: 2010-9-17 09:00 标题: 回复 8楼 的帖子
可以试试把它拿出来,call一下。
作者: TX_kakashi 时间: 2010-9-17 09:18
我已经把set拿出来call了,似乎程序已然不认识%n%啊,只认!n!- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,10) do (
- call :_set
- echo !n!
- echo %n%
- pause
- for /f "delims=~ skip=!n!" %%i in (1.txt) do (echo %%i)
- )
- pause
-
- :_set
- set/a n=%random%%%3
- exit/b
复制代码
作者: batman 时间: 2010-9-17 16:49 标题: 请看下面的示例:
- @echo off
- for /l %%a in (1,1,5) do call :lp %%a
- pause>nul&goto :eof
- :lp
- for /f "tokens=%1" %%a in ('tasklist') do echo %%a
复制代码
作者: TX_kakashi 时间: 2010-9-18 14:12 标题: 回复 13楼 的帖子
使用参数变量,这个方法很巧妙啊
作者: 77七 时间: 2023-10-13 13:22
- @echo off
- set n=1
- setlocal enabledelayedexpansion
- cmd /q /c for /f "skip=!n! delims=" %%a in ('type "%~f0"') do echo %%a
- pause
复制代码
作者: qixiaobin0715 时间: 2023-10-13 15:27
回复 15# 77七
真有你的,把这么早的帖子给翻了出来。实际上可以换一个思路就没这么复杂,不使用skip而用more,!n!,%n%,%%a都可以适用:- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,5) do (
- set /a n+=1
- for /f "delims=" %%b in ('more +!n! 123.txt') do echo,%%b
- )
- pause
复制代码
作者: 77七 时间: 2023-10-13 18:54
回复 16# qixiaobin0715
谢谢大佬指点!昨天在写代码的时候想用到 skip=!n!,发现失败,今天通过搜索找到的这个帖子。
- @echo off
- set n=1
- setlocal enabledelayedexpansion
- for /f "delims=" %%b in ("=") do (
- cmd /q /c "for /f "skip=!n! delims=%%b" %%a in ('type "%~f0"') do echo %%a"
- )
- pause
复制代码
- @echo off
- for /d %%d in (*) do (
- cmd /q /c "for /r "%%d" %%i in (*) do echo %%i"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |