2013-10-24 82 views
0

這似乎是一個簡單的問題,但'^'在批處理中做了什麼?我正在做類似於下面的代碼(從here複製)。文件someFile.txt包含要保存的文件的名稱,「文件夾」是從中刪除所有文件的目錄而不是在someFile.txt中提到。爲什麼此代碼在for語句中從^|中刪除^時不起作用。此外,爲什麼不能將do後面的表達式包裝在()中以創建更長的表達式?'^'在批處理腳本中做什麼

@echo off 
setlocal 
set folder="c:\somePath" 
set excludeFile="c:\somePath2\someFile.txt" 
for /f "eol=: delims=" %%F in ('dir /b /a-d %folder% ^| findstr /vibg:%excludeFile%') do del "%folder%\%%F" 

回答

1

^轉義下一個字符帶走所有特殊的意義。 ^從直立的管道阻止管道。 do可以這樣包裝:

for /f "eol=: delims=" %%F in ('dir /b /a-d %folder% ^| findstr /vibg:%excludeFile%') do (del "%folder%\%%F") 
+0

so ^允許dir表達式在管道之前評估?而關於他(),inside()中的表達式需要保持在同一行還是其他東西?我明白了,因爲它是一個字符串,'|'會立即退出 – jenesaisquoi

+0

yup。上半場比賽直到第二半時纔會開始前進。 – nephi12

1

它允許您打印特殊字符。

維基百科:

某些字符,例如管道(「|」)字符,有特殊意義的命令行。他們不能被打印成使用echo命令文本,除非使用插入符號^符號轉義:

C:\> Echo foo | bar 
'bar' is not recognized as an internal or external command, 
operable program or batch file. 

C:\> Echo foo ^| bar 
foo | bar 

不知道的DO()的東西,雖然

來源:http://en.wikipedia.org/wiki/Batch_file