
【討論】這是不是又是for的一個bug最后由 batman 于 -5-28 13:05前言: 這個問題是昨天晚上幫人解決一個文件處理問題時碰到的,害我查錯查了一個多小時,最后發(fā)現(xiàn)是for /r的問題,現(xiàn)用代碼將問題模擬出來,供大家討論:
運行這個代碼在我本機上的顯示如下:nclick="copycode($('code0'));">復制代碼
- @echo off&setlocal enabledelayedexpansion
- set str=temp
- for /l %%a in (1,1,10) do set str=!str!%%a
- if not exist !str! md !str!
- for /l %%a in (1,1,100) do cd.>!str!%%a.txt
- for /r temp %%a in (*.txt) do (
- echo %%~dpa
- for /r %%~dpa %%b in (*.txt) do echo %%b&pause
- echo ok
- for /r %cd%temp12345678910 %%b in (*.txt) do echo %%b&pause
- )
- :: 將上面兩個&pause去掉就可刪除所創(chuàng)建的環(huán)境
- if exist temp rd /s /q temp
D:批處理testtemp12345678910okD:批處理testtemp123456789101.txt請按任意鍵繼續(xù). . .請按任意鍵繼續(xù). . .按道理顯示應為:
D:批處理testtemp12345678910D:批處理testtemp123456789101.txt如果for /r %%~dpa %%b in (*.txt) do echo %%~dpb&pause這句正常運行了,那么程序會在這個pause停住,而下面的ok不會顯示出來,但實際上卻是在for /r %cd%temp12345678910 %%b in (*.txt) do echo %%b&pause上停住了(ok明顯顯示出來了),這就說明,第一個for /r沒有得到正常運行,那么是不是因為目錄級數(shù)太多了%%~dpa在for /r 中不能擴展為正確的路徑啊?大家不妨展開思考和討論。。。ps:就是在回這個貼遇到的問題:http://www.bathome.net/thread-12539-1-1.html,最后將for /r改成for %%b in (%%~dpa*.txt) do ..才解決問題

