2016-05-16 62 views
0

我知道這個程序是做什麼的。什麼「!f:〜0,3!」在循環中的命令行參數?

SETLOCAL ENABLEDELAYEDEXPANSION 
for %%a in (*.eml) do (
    set f=%%a 
    set g=!f:~0,3! 
    md "!g!" 2>nul 
    move "%%a" "!g!" 
) 

但我很困惑,究竟這種說法有:

g=!f:~0,3! 

而這一次在 「MD」 通話結束:

2>nul 
+0

這是非常廣闊的 - 這裏的人不喜歡被人當作沒有努力只是一個代號解釋服務來自提問者。我相信你明白。大多數這些命令可以很容易地谷歌搜索;你能澄清你遇到麻煩的部分嗎?它是'g =!f:〜0.3!'位? (我也會因此而感到困惑。) –

+0

哦,是的!該部分和'2> nul' – jirostatic

+0

也許編輯並澄清這些是你想要解釋的位。 –

回答

2

有關的說明set g=!f:~0,3!打開命令提示符窗口,運行set /?並閱讀輸出幫助,以解釋子字符串引用和延遲擴展。也請看一下關於set的SS64文章和關於set的微軟文章。

set g=!f:~0,3!使用延遲環境變量擴展將環境變量f的前3個字符分配給環境變量g

有關2>nul的解釋,請閱讀Microsoft有關Using command redirection operators的文章。此代碼將每個寫入第二個標準句柄(stderr)的消息重定向到設備nul。換句話說,所有錯誤消息的輸出都被這個代碼所抑制。

命令md(make目錄)輸出錯誤消息到stderr如果要創建的目錄已存在。爲md "!g!" 2>nul另一個解決方案是

if not exist "!g!\*" md "!g!" 

對於批處理代碼理解使用的命令以及它們如何工作,打開命令提示符窗口中,執行有下面的命令,並閱讀完全是爲每個命令顯示的所有幫助頁面非常小心。

  • for /?
  • md /?
  • move /?
  • set /?
  • setlocal /?
+0

非常感謝你@Mofi。這對我幫助很大。 – jirostatic