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

[文本处理] [已解决]批处理命令for语句中引用为何出错?

本帖最后由 keiamy 于 2012-1-16 09:56 编辑

这是youxi01大大在cn-dos里曾经帮人解答过的的一段代码 (原贴:http://www.cn-dos.net/forum/view ... 0810&sid=ziqZC9)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if "%2"=="" (
  4.     for /f "tokens=2 delims=#" %%i in ('"%~0" %~s1 OK^|sort') do echo %%i
  5. ) else (
  6.     for /f %%i in (%1) do (
  7.        call :CheckNum %%i Res
  8.        echo !Res!#%%i)
  9.     goto :eof)
  10. pause>nul
  11. :CheckNum num Res
  12.    set/a Res=0
  13.    for /l %%i in (0 1 1000) do (
  14.       set "var=%~1"
  15.       set tmp=!var:~%%i,1!
  16.       if "!tmp!"=="" goto :eof
  17.       set/a Res+=1)
复制代码
测试文本:
  1. 25
  2. 1
  3. 9
  4. 385
  5. 87
  6. 195876
复制代码
为何将第一个for 中的%~s1与第二个for 的%1互换后会出错(在%1路径带有空格的情况下拖进P内)
因本人还是很菜鸟,想了很久也不明所以,所以才发贴求助,高手们可以给我解释下吗?谢谢的
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

首先很是多謝CrLf 版主和ivor 的詳細解答和測試,其實%~s1是我自己加上的,youxi01的原貼是%1的(哈哈,不好意思) youxi01在原貼中也說明了使用格式:命令行中,输入:[本文件名] [待处理数字文本文件名],若依他的格式是并沒問題,但我想把測試文本拖進P時就會報錯 'C:\Documents' 不是內部或外部命令(是路徑含空格問題是吧﹖)
若測試文本是=C:\Documents and Settings\Administrator\桌面\test.txt
和暫不考慮測試文本名含空格,test.txt內容都在九位數以內
為何%~s1用在第一個for 可以,但用在第二個卻不能呀???(其實我最想知道是這个)
首次發貼,所以表達不好了,哈哈!
在這真的很有學習風氣,剛發貼不久,版主就回應了,謝謝大家!
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

另外為何錯誤結果是這样的, 'C:\Documents' 不是內部或外部命令.可執行的程式式或批次檔...
若第一個和第二個for裡都是%1的話,不是這样嗎:
for /f %%i in ("C:\Documents and Settings\Administrator\桌面\test.txt"
) do (
       call :CheckNum %%i Res
       echo !Res!#%%i)
    goto :eof)
因雙引號參數被for當作字符串處理後, C:\Documents 不是應該會繼續轉跳到:CheckNum進行嗎﹖
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

十分感謝版主的熱心解答,原來是這样的,
因為自己還是很菜,靠自己還是無法解理,就得靠版主的幫助,現弄明白了,版主很高深呀
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

返回列表