перемещать файлы, исключая * .log, используя командный файл - PullRequest
2 голосов
/ 14 июня 2011

Я хочу переместить файлы из одного каталога в другой, за исключением файла * .log.Я пробовал XCOPY, поскольку он имеет переключатель EXCLUDE, но он не копирует, файлы по-прежнему остаются в качестве исходной папки.

Ответы [ 5 ]

3 голосов
/ 14 июня 2011

Если вы можете использовать ROBOCOPY, попробуйте это:

ROBOCOPY C:\Source C:\Dest * /MOV /XF *.LOG
3 голосов
/ 14 июня 2011

Для начала попробуйте эту летучую мышь

for %%a in (%1\*) do (
  if /I not "%%~xa"==".log" (
    ECHO move /Y %%~fa %2\%%~nxa
  )
)

После тщательного тестирования удалите команду ECHO.

Для получения дополнительной информации прочитайте HELP FOR, HELP IF, а для синтаксиса, используемого для извлечения расширения из имени файла, прочитайте HELP CALL.

1 голос
/ 16 июня 2011

Без RoboCopy вы можете приблизиться в партии.Это примет переданный шаблон, запустит на нем dir, а затем удалит записи в списке каталогов, оканчивающемся на .log.Затем он призывает двигаться на каждом.Поскольку мы перемещаем каждый файл по отдельности, нам нужно убедиться, что место назначения существует и является папкой - в противном случае перемещение может интерпретировать его как перемещение и переименование.

Обратите внимание, что возврат dir может невы ожидаете, если передадите ему одно имя папки.Все подстановочные знаки должны работать нормально.

@if ("%~1") == ("") goto usage
@if ("%~2") == ("") goto usage
@if not ("%~3") == ("") goto usage

@if not exist "%~2" mkdir "%~2"
@dir /a:d "%~2" >nul 2>nul
@if %errorlevel% neq 0 echo Directory %2 cannot be created or a file with that name already exists in that location. && exit /b 1
@for /f "delims=" %%a in ('dir /b "%~1" 2^>nul ^| findstr /e /i /v ".log"') do @move /y "%%a" "%~2" >nul && echo %%a
@goto :eof

:usage
@echo movewithoutlog.bat
@echo Moves a set of files, omitting any with .log extension.
@echo Usage: movewithoutlog.bat files destination
@echo e.g. movewithoutlog.bat *.* ..\newdestination
@exit /b 1
0 голосов
/ 14 июня 2011

http://www.pcreview.co.uk/forums/use-exclude-option-xcopy-t1469487.html

По предыдущей гиперссылке я могу прочитать следующий ВОПРОС с соответствующим ОТВЕТОМ:

ВОПРОС:

Привет

Я использую команду xcopy ниже, но она не выполняет то, что я хочу. Вместо этого жалуется "не могу прочитать файл: .obj" и затем останавливается. xcopy c: \ t1 c: \ t2 /EXCLUDE:.obj

Я хочу, чтобы все файлы .obj пропускались во время копирования. Кто-нибудь может мне помочь? Благодарю. Tony

ОТВЕТ:

Директива / EXCLUDE определяет список файлов, которые содержат строки имена файлов для исключения. Например, чтобы сделать то, что вы пытаетесь сделать, вы будете необходимо создать файл, предположим, мы называем его MyExclude.txt. В этом файле есть только одна спецификация файла - ".obj" (без кавычек).

Затем измените команду на:

xcopy c: \ t1 c: \ t2 /EXCLUDE:MyExcludes.txt

===> ЭТО ЧАСТИЧНОЕ РЕШЕНИЕ, потому что вы копируете все файлы, кроме .obj, но не удаляете их из ИСТОЧНИКА. Вы можете попытаться перенаправить вывод XCOPY в файл, а затем вручную добавить DELETE в каждую строку файла, записанную командой XCOPY. Наконец, вы выполняете файл для удаления исходных файлов.

0 голосов
/ 14 июня 2011

Вы, вероятно, могли бы сделать что-то вроде:

mv | grep -v *.log | ./* /path

Чтобы проверить, будете ли вы перемещать нужные файлы, вы можете просто сделать "ls" и передать это пропущенному "grep""mv"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...