2010-07-09 47 views
112

tôi đã kịch bản hàng loạt sau từ Wikipedia:Batch: Hủy bỏ phần mở rộng tập tin

@echo off 
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%f 
) 
pause 

Trong cho vòng tất cả các file với flv mở rộng được lặp lại, nhưng tôi muốn làm cho một số hành động với các tập tin (s) nơi tôi cần một lần tệp mà không có phần mở rộng và một lần với phần mở rộng. Làm thế nào tôi có thể nhận được hai?

Tôi đã tìm kiếm giải pháp nhưng không tìm thấy giải pháp nào. Tôi là một newbie thực sự trong hàng loạt ...

Trả lời

221

Bạn có thể sử dụng %%~nf để có được tên tập tin duy nhất như mô tả trong tài liệu tham khảo cho for:

@echo off 
    for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
    echo %%~nf 
) 
pause 

Các tùy chọn sau có sẵn:

 
Variable with modifier Description 

%~I      Expands %I which removes any surrounding 
         quotation marks (""). 
%~fI     Expands %I to a fully qualified path name. 
%~dI     Expands %I to a drive letter only. 
%~pI     Expands %I to a path only. 
%~nI     Expands %I to a file name only. 
%~xI     Expands %I to a file extension only. 
%~sI     Expands path to contain short names only. 
%~aI     Expands %I to the file attributes of file. 
%~tI     Expands %I to the date and time of file. 
%~zI     Expands %I to the size of file. 
%~$PATH:I    Searches the directories listed in the PATH environment 
         variable and expands %I to the fully qualified name of 
         the first one found. If the environment variable name is 
         not defined or the file is not found by the search, 
         this modifier expands to the empty string.  
+0

Công việc tuyệt vời. Nó đã giúp đỡ tôi. –

+2

Chỉ cần lưu ý nhanh: trong ví dụ trên ** %% f ** sẽ giống như 'C: \ Users \ Admin \ Ordner \ foo.flv' và ** %% ~ nf ** sẽ cung cấp cho bạn' foo' . Nếu bạn muốn mọi thứ _except_ sử dụng phần mở rộng ** %% ~ df %% ~ pf %% ~ nf ** sẽ cung cấp cho bạn 'C: \ Users \ Admin \ Ordner \ foo' – ehambright

13

Tôi cũng là một người xa lạ gì với các cửa sổ cmd, nhưng cố gắng này:

echo %%~nf 
8

Đây là một phản ứng rất trễ, nhưng tôi đến với điều này để giải quyết một vấn đề cụ thể tôi đã có với DiskInternals LinuxReader phụ thêm' .efs_ntfs' đến tập tin mà nó lưu vào phi NTFS (FAT32) thư mục:

@echo off 
REM %1 is the directory to recurse through and %2 is the file extension to remove 
for /R "%1" %%f in (*.%2) do (
    REM Path (sans drive) is given by %%~pf ; drive is given by %%~df 
    REM file name (sans ext) is given by %%~nf ; to 'rename' files, move them 
    copy "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf" 
    echo "%%~df%%~pf%%~nf.%2" copied to "%%~df%%~pf%%~nf" 
echo. 
) 
pause 
+0

Tôi không chắc nó trả lời câu hỏi câu hỏi, nhưng nó thực sự đã giúp tôi, cảm ơn! – matan7890

+1

@ matan7890 True; op không chỉ rõ những gì "Tôi muốn thực hiện một số hành động với tệp (s)" [sic] đòi hỏi, nhưng một trong những hành động đó có thể đổi tên chúng, trong trường hợp đó, câu trả lời của tôi là mở rộng câu trả lời được chấp nhận. –

+0

Điều này đã giúp một người bạn của tôi, người đã mở một tệp đính kèm và đã thêm '.ryptrypted' vào tất cả các tệp của mình, cùng với nhu cầu đòi tiền chuộc. Rõ ràng tập lệnh tấn công phải là một tập tin thực thi mà ngược lại và thêm '.ryptrypted' vào tất cả các tập tin. – AwokeKnowing

23

Trong trường hợp tệp mà biến của bạn nắm giữ không thực sự tồn tại, phương thức FOR sẽ không hoạt động. Một mẹo nhỏ bạn có thể sử dụng, nếu bạn biết độ dài của phần mở rộng, đang thực hiện một chuỗi con:

%var:~0,-4% 

các -4 nghĩa là 4 chữ số cuối cùng (có lẽ .ext) sẽ được rút ngắn.

+0

Điều này không làm việc cho tôi (trên Win8.1) - có lẽ tôi hiểu lầm nó khi cố gắng 'echo% f: ~ 0, -4% 'trong ngữ cảnh của ví dụ được sử dụng trong câu hỏi. Tôi đang làm gì sai? – Wolf

+2

Dường như hoạt động cho các biến "bình thường", không phải cho biến (hoặc có thể tôi không biết cú pháp chính xác).Dù sao điều này sẽ làm việc trong bối cảnh của ví dụ OP: 'SET fl = %% f' và sau đó' echo% fl: ~ 0, -4% ' –

+1

Làm việc cho tôi trong Win10 cho các tham số dòng lệnh đơn giản như% 1,% 2 vv Thanx! – deko

0

cách xóa nhiều tiện ích mở rộng? Cho phép nói rằng tệp của tôi có đuôi tệp là filename.abc.def.xyz.anything và tôi chỉ muốn trích xuất tên tệp.

Các vấn đề liên quan