2011-08-26 72 views
2
for /F "tokens=*" %* in (Test.txt) do md ".\%*" & cd "%*" & md "Something1" & md "Something2" & cd ".." 

的DOS命令將從文本文件中提取姓名和創建一個名爲文件夾,然後兩個子文件夾。爲什麼「for」在批處理文件中不起作用? (工程罰款外)

Apple
-Something1
-Something2

但是,當我把它放到一個批處理文件,如下所示:

@ECHO OFF 
@for /F "tokens=*" %* in (Test.txt) do md ".\%*" & cd "%*" & md "Something1" & md "Something2" & cd ".." 
ECHO Done 
PAUSE 

然後從Windows圖形用戶界面運行一個篩網彈出,關閉,什麼都不做。即使我使用工作的DOS命令創建批處理,它也不會執行任何操作。我錯過了什麼?

謝謝。

+1

你有沒有試過讓'ECHO ON'看看它是否告訴你什麼? –

+0

...因爲你已經叫@echo off,所以第二個@(在for的前面)是毫無意義的。但是你需要刪除這個以查看任何錯誤。 – DaveRandom

回答

6

在批處理文件,你需要在for變量翻一番「%」。不要問我爲什麼。 :)

+1

因爲單個%是變量名的開始,如%UserName%。您需要爲'For'轉義它以查看%而不是變量的內容。 –

+0

對。那塊小塊塊是無價的,謝謝! – Sam

+0

@手-E-食品單一%也是在命令行上一個變量名的開始.. – GolezTrol

2

這個變化對我的作品:

setlocal enabledelayedexpansion 
for /F "tokens=*" %%g in ('type foo.txt') do (
       md ".\%%g" 
       cd "%%g" 
       md "Something1" 
       md "Something2" 
       cd ".." 
     ) 
endlocal 

我選擇了把括號和一個上線的一系列命令。你的連鎖&-分離的命令也應該工作。

setlocal/endlocal塊限制變量的範圍。 enabledelayedexpansion參數在cmd中啓用了一些額外功能。這通常不是必需的,因爲它是CMD的默認設置,但該默認設置可能已通過策略進行了更改,因此最好包含它。

我更喜歡在腳本中使用pushd/popd而不是cd blah/cd ..。我認爲它更強大。

+0

您的解決方案是我去原來的方式,但是當我只是無法得到任何在我的批處理文件去我將我的程序削減到最低限度。謝謝。 – Sam

相關問題