2014-02-13 26 views
0

我創建了一個windows批處理文件,僅將具有特定擴展名的文件複製到不同的文件夾中。下面是我用的代碼行:只複製htm不是html文件批處理窗口

for /R "%cd%" %%f in (*.htm) do copy "%%f" "%cd%\myfolder" 

的問題是,這將複製以啓動名爲.htm任何擴展,也就是html的,我不希望;只有.htm。這個副本如何防止?

我已經試過

"(*.htm)" 
("*.htm") 
(*".htm") 
(*."htm") 
(*.htm*) 

感謝

解決方案:

for /R %%f in (*.htm) do if /I "%%~xf" == ".htm" copy "%%f" "myfolder" 

感謝@Aacini和@Monacraft

回答

2

這應該工作:

for /R %%f in (*.htm) do if /I "%%~xf" == ".htm" copy "%%f" "myfolder" 

一對夫婦的意見完全無關的問題:

  • %cd%是始終當前文件夾替換的變量。如果您給出沒有以前路徑的任何名稱,則在當前文件夾中假定該名稱爲。這種方式name%cd%\name是完全一樣的,第二個通常從來沒有使用過。

  • for /R [path] %%f ...命令中,如果未指定路徑,則假定當前文件夾。

0

有可能是一個更好的辦法,但(*.ht?)應做到這一點。

+0

這符合短期和長期的文件名,以便不工作來解決這個問題。 – foxidrive

+0

我對'?'通配符的理解是它僅僅匹配1個字符而不是'*'通配符。例如'file?'會匹配'file1'或'files',但不匹配'filename'。這是不正確的? – LeonardBlunderbuss

+0

'DIR'和'FOR'等匹配'BOTH'短文件名和長文件名。在這種情況下,'a.html'的短文件名擴展名是'.htm',並且您的filespec將匹配它。 – foxidrive

2

你可以檢查使用if聲明:

for /R "%cd%" %%f in (*.*) do if /i "%%~xf"==".htm" copy "%%f" "%cd%\myfolder" 

這是一批這樣做的邏輯方式。

蒙娜麗莎

+0

@foxidrive:如果您查看問題,OP已經在其原始表單中測試了此解決方案_並報告它無法正常工作。您介紹的更改使得此解決方案几乎與礦山相同,儘管礦山在此之後2小時發佈。我只是想澄清這一點...... – Aacini

+0

@aacini通過闡明'%cd%'點,您的解決方案改進了Mona的解決方案。 Mona的解決方案缺少不區分大小寫的開關,所以在許多情況下會失敗 - 我只是改進了這個問題。我提高了你的解決方案。 – foxidrive

+0

不區分大小寫的部分是我的問題。 – user2454565

1

原因*.htm比賽.html文件,是因爲較短的8.3文件名。具有.html擴展名的文件將具有.htm擴展名的短名稱。

Monacraft和Aacini已經提供了工作解決方案,使用循環體內的IF statemnts。

這是一個解決方案,它使用在FOR/F IN()子句中通過管道傳送到FINDSTR的DIR/B。

for /f "eol=: delims=" %%F in ('dir /b /s /a-d-h-s *.html ^| findstr /lie .htm') do copy "%%F" "myfolder" 
0

如果您使用的是Windows Vista或更高版本的操作系統時,您可以使用ROBOCOPY並排除不需要的文件

robocopy "%cd%" "%cd%\myFolder" *.htm /xf *.html 
相關問題