在命令列(CMD)中複製具有一定字元數的檔案名

在命令列(CMD)中複製具有一定字元數的檔案名

我需要複製一個資料夾中名稱為五個字元長的所有文字檔案。我知道這個命令用於列出:

$ dir folder /B | findstr /R "^.....\.txt"

但我想將上述命令列出的所有檔案名稱複製到另一個資料夾中。

答案1

我在問(不只對我自己)“這不是很簡單嗎…”

copy  C:\ORIG_DIR\?????.txt C:\Dest_Dir

感謝 G-Man 的測試電源外殼有用,同時在執行程式上面的命令將複製每個匹配項最多五個字符,並包含所有以.txt.

問號(?)

使用問號代替名稱中的單一字元。例如,如果您鍵入loss?.doc,您將找到檔案Glossy.doc 或Gloss1.doc,但找不到Glossary.doc。

參考:

答案2

這在 Batch 中是可能的,但在 PowerShell 中很容易。

ls | foreach { if (($_.BaseName.Length -eq 5) -and ($_.Extension -eq ".txt")) 
    { $_.CopyTo("\Name\Of\Target\Folder\" + $_.Name) }

您也可以根據正規表示式檢查檔案名稱來完成此操作,但此方法效果很好。

答案3

在批次處理中你可以這樣做:

@Echo OFF

Set "targetDir=C:\Dir"

For %%# In ("*.txt") DO (

    (Echo "%%~nx#" | findstr /R "^......\.")1>Nul 2>&1 && (

        Echo Copying "%%~nx#" ...
        (Copy /Y "%%~f#" "%targetDir%\%%~nx#")1>NUL

    )
)

Pause&Exit /B 0

答案4

這是另一種批次方法:

@迴聲關閉
setlocal啟用延遲擴展
對於 (*.txt) 中的 %%f 執行 (
      設定 foo=%%f
      設定 foo=!foo:~5,5!
      如果!
            (這個檔名(%%F) 匹配模式;用它做你想做的事。

是子字串機制!foo:~5,5!的一個實例 ;它提取檔案名稱的子字串,從第 6 個字符(偏移量 5)開始,長度為 5(足以捕獲再加一個字符,如果有更多字符)。因此 ,如果檔案名稱的第 6 個、第 7 個、第 8 個和第 9 個字符是、、和,並且沒有第 10 個字符,則變數具有值。!variable:~offset:length!.txtfoo.txt.txt

相關內容