當檔案名稱中包含四個或更少字元時,如何使用命令列複製檔案?

當檔案名稱中包含四個或更少字元時,如何使用命令列複製檔案?

嘗試將檔案名稱中包含四個或更少字元且具有特定副檔名的檔案複製到新資料夾。我已經嘗試這樣做了幾個小時了!變得沮喪。我使用了複製命令和通配符 ?和 *

答案1

正如 AFH 在評論中指出的那樣,一個簡單的「COPY ???.ext」將適用於四個檔案名或更少字元。在基於 DOS 的系統中的 glob 樣式模式匹配中,* 表示“0 個或多個字元”,顯然 ?表示零個或一個字元。但是,請務必了解這種類型的模式匹配是在應用程式層級完成的,即 Windows(就此而言,還有 DOS)將命令列完全按照鍵入的內容傳遞給要執行的程式。如果您輸入“???.ext”,這正是 COPY 命令看到的內容。

將此與我使用過的其他 shell 進行對比,例如在 un*x(bash、tcsh 等)中,命令解釋器首先擴展所有模式匹配並將完整文件列表傳遞給命令。也就是說,在這些 shell 中,如果您鍵入“copy file.?”,shell 會呼叫“copy file.1 file.2 file.3”,“copy”通常不會看到文字“file.?”爭論。

(這就是為什麼我最初的第一個答案不正確——我用一個命令測試了它不是擴展 Windows 的 CMD.EXE 的方式......只是需要注意的事情! )

正常的 Windows 控制台/命令列中沒有辦法(這是不是DOS,順便說一句!和 * 在 Windows 中工作: ?匹配單個字符,* 匹配盡可能多的字符。也不讓您指定計數。但是使用批次檔按順序運行每個命令,可以達到相同的效果:

@echo off
copy "????.ext" "target folder"
copy "???.ext" "target folder"
copy "??.ext" "target folder"
copy "?.ext" "target folder"

使用各種批次檔技術,您還可以修改它以適用於其他檔案名稱長度,或使用不同的目標資料夾等。

此外,在現代 Windows 作業系統中,您很可能可以透過 Windows Script Host 取得 VBScript,而在 Win8 中,您應該擁有 PowerShell,這兩者都允許更廣泛的程式邏輯,例如強大的正規表示式等。

相關內容