1

Я использую «копировать» в окне консоли в Windows XP Pro (так что я в основном использую команды DOS)

У меня есть файлы с тремя символами плюс расширение и файлы с двумя символами плюс расширение. У меня есть следующее в пакетном файле ms-dos ...

copy ???.gif n:\inetpub\wwwroot\images

что касается моего понимания подстановочных знаков windows/dos, должно копировать ТОЛЬКО те файлы, которые имеют три символа в имени. Но это также копирование файлов с двумя символами.

Поэтому мое понимание должно быть неправильным, так есть ли другой способ в командном файле ms-dos, чтобы ограничить копирование только файлами с определенным числом символов в их имени?

3 ответа3

2

Чтобы выбрать только те файлы, которые вы хотите, вам нужно включить регулярные выражения. Один из способов сделать это - использовать команду findstr. (http://ss64.com/nt/findstr.html)

Чтобы соединить выходные команды, это выглядит немного уродливо, но основной формат выглядит следующим образом:

for /f "delims=" %a in ('dir /b ^| findstr "\<[a-z][a-z][a-z].gif"') do copy %a n:\inetpub\wwwroot\images

Чтобы немного объяснить:

for /f "delims=" %a in

Это настройка, так что каждый фрагмент вывода команды в '()' будет помещен в% a

('dir /b ^| findstr "\<[a-z][a-z][a-z].gif"')

Эта команда использует dir /b для получения списка файлов в текущем каталоге и передает его в findstr. findstr ищет входные строки, которые соответствуют следующему шаблону: они содержат слово, которое начинается (\<) с трех букв ([az] [az] [az]), за которыми следует .gif (.txt).

do copy %a n:\inetpub\wwwroot\images

Это копирует файл с именем в% a.

1

? означает один символ или NULL в конце имени файла.

Итак, БА ??TXT будет соответствовать BARR.TXT и BAR.TXT. Так как вы используете 3 ? , это также будет соответствовать 2 символам и 1 символу ...

В Windows Vista есть команда для копирования, называемая robocopy и она имеет возможность исключить некоторые файлы. Вы можете попробовать:

robocopy ???.txt c:\temp\ /xf??.TXT

но я не уверен, что это будет работать в Windows XP

0

Вы можете сделать это следующим образом:

@echo off
setlocal EnableDelayedExpansion
for %%f in (???.gif) do (
    set filename=%%f
    set fourthchar=!filename:~3,1!
    if !fourthchar! == . copy %%f n:\inetpub\wwwroot\images
)

То есть копируйте файлы, которые имеют три символа перед точкой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .