2016-08-21 7 views
3

Я написал командный файл (с использованием 7-Zip), который берет файлы в одной папке и каждый раз поместил их в другую папку, созданную в пакетном файле, после чего я удалил из исходная папка файлов.Zip и удалить в том же файле с помощью 7-Zip

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

Оригинальная папка называется SmartLogger, а новая - SmartLoggerZipped.

Мне нужно закрепить файлы на SmartLogger и оставить их в одной папке, но затем удалить исходные файлы в папке.

@echo off 
SET hr=%time:~0,2% 
IF %hr% lss 10 SET hr=0%hr:~1,1% 
SET SrcDir=E:\Logs\SmartLogger 
SET DestDir=E:\Logs\SmartLoggerZipped 
IF NOT EXIST "%DestDir%" MD "%DestDir%" 
ECHO. 
ECHO Compressing files and folders in E:\Logs\SmartLogger 
ECHO drive and moving to E:\Logs\SmartLoggerZipped and 
ECHO then delete from E:\Logs\SmartLogger 
ECHO. 
FOR %%A IN ("%SrcDir%\*.*") DO 7za a -tzip "%DestDir%\%%~NXA.zip" "%%~A" -mx5 && DEL /Q /F "%%~A" 
ECHO. 
PAUSE 
+0

Переменная среды 'hr' не используется вообще. И пакетный файл работает, хотя вам нужно изменить '*. *' Только на '*' и '%% ~ NXA.zip' на' %% ~ nxA.zip' за то, что он красивее. Итак, какова ваша проблема, что вы просите? – Mofi

+0

Да, я хотел создать дату сначала в новой папке, которую я создаю, так что она осталась здесь, я ее уничтожу. Я хочу закрепить в той же папке, не создавая новую, и стереть старые файлы из этого каталога. –

ответ

1

Предположим папку E:\Logs\SmartLogger содержит файлы:

  • 7za920.zip
  • 7-zip.chm
  • LICENSE.TXT
  • readme.txt

Цель состоит в том, чтобы сжать каждый файл в этой папке в ZIP-файл wi одно и то же имя файла, игнорируя все уже существующие файлы *.zip в этой папке, чтобы иметь возможность запускать этот пакетный файл один раз в день.

@echo off 
for %%A in ("E:\Logs\SmartLogger\*") do (
    if /I not "%%~xA" == ".zip" 7za.exe a -tzip -mx5 -y -- "%%~dpnA.zip" "%%~A" >nul && del /Q /F "%%~A" 
) 

Папка E:\Logs\SmartLogger содержит после выполнения выше пакетного файла:

  • 7za920.zip ... не прикоснулся
  • 7-zip.zip ... содержит 7-Zip .chm
  • license.zip ... содержит license.txt
  • readme.zip ... содержит readme.txt

Или цель сжатия каждого файла в этой папке в ZIP-файл с таким же именем файла и расширение файла, игнорируя все уже существующие *.zip файлы в этой папке чтобы иметь возможность запускать этот командный файл один раз каждый день и добавлять расширение файла .zip к каждому сжатому файлу.

@echo off 
for %%A in ("E:\Logs\SmartLogger\*") do (
    if /I not "%%~xA" == ".zip" 7za.exe a -tzip -mx5 -y -- "%%~A.zip" "%%~A" >nul && del /Q /F "%%~A" 
) 

Папка E:\Logs\SmartLogger содержит после выполнения выше пакетного файла:

  • 7za920.zip ... не прикоснулся
  • 7-zip.chm.zip ... содержит 7 -zip.chm
  • license.txt.zip ... содержит license.txt
  • readme.txt.zip ... содержит readme.TXT

Разница между двумя пакетными файлами является "%%~dpnA.zip" против "%%~A.zip".

Чтобы понять используемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • if /?
  • for /?
  • 7za --help

И смотри также статью Microsoft о Using command redirection operators для объяснения >nul.

+0

спасибо! теперь он работает хорошо! –