Lô 7zip tạo thư mục thay vì tên tệp


1

Tôi có một tập lệnh bó Windows đơn giản, được chạy bởi phần mềm sao lưu dưới dạng hành động sao lưu trước. Nó chỉ đơn giản là tìm kiếm các bản SQL mới nhất, nén chúng vào kho lưu trữ 7zip nhỏ hơn 10 lần, sau đó sao lưu đám mây nhặt nó lên và gửi đến bộ lưu trữ đám mây để lưu trữ.

BATCH tạo tên tệp có DATE ở phía trước: 07-10-2018-bak.7z

Nhưng tôi có vấn đề với tập tin BATCH:

  • Khi tôi chạy thủ công, nó sẽ thực thi tốt và tạo tên tệp 07-10-2018-bak.7z trong thư mục được cung cấp
  • nhưng khi tôi chạy nó thông qua phần mềm sao lưu (với tư cách là người dùng HỆ THỐNG) dưới dạng hành động sao lưu trước, thì thay vào đó, nó tạo SUB-FOLDERS cho mỗi DASH, như thế này: \07\10\2018-bak.7z

Tôi đã làm ECHOtừng dòng lệnh, và nó chỉ hiển thị tốt. Ngay cả khi tôi chạy các dòng lặp lại theo cách thủ công, chúng KHÔNG tạo thư mục, nhưng nếu có, tên tệp đầy đủ có ngày bao gồm:

"c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\\**07-10-2018-bkp.7z**" "D:\SQL\Backup\SklSistem_FULL_sob.BAK"

Bất cứ ý tưởng mà tôi bỏ lỡ điểm?

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:.=-!
  "c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

time/t|find "M"trả về không có gì trong vỏ Windows 7 cmd của tôi.
DavidPostill

Nếu bạn đặt, echo onbạn sẽ thấy 7z.exedòng lệnh được mở rộng như thế nào .
AFH

@DavidPostill - Tôi nghĩ rằng mã này nhằm xác định xem định dạng thời gian có bao gồm AM / PM hay không. Của bạn không, cũng không phải của tôi.
AFH

1
Có, thời gian dòng / t | tìm "M" && đặt t = 1,4 * || đặt t = 1,3 * lấy ngày từ định dạng 12 hoặc 24 giờ và trong lô của tôi, nó hoạt động hoàn hảo. Nó cũng hoạt động từ TaskScheduler. Nhưng có vẻ như nó có vấn đề khi chạy dưới dạng Sao lưu dự phòng từ phần mềm Sao lưu trực tuyến, vì chỉ trong trường hợp này, nó không tạo tệp lưu trữ có tên 07-10-2018-bak.7z mà thay vào đó, nó tạo cấu trúc thư mục \ 07 \ 10 \ 2018- bak.7z.
Labsy

@PimpJuice: CÓ, vậy thôi! Tệp hàng loạt chạy với tư cách là người dùng quản trị tạo ra% date% là 08.10.2018, nhưng khi chạy với tư cách là người dùng HỆ THỐNG thông qua ứng dụng Sao lưu trực tuyến,% date% trở thành 10/08/2018. Cảm ơn bạn!
Labsy

Câu trả lời:


0

Vấn đề này có thể do sự khác biệt trong " định dạng ngày " và %DATE%đầu ra biến môi trường mà tập lệnh tạo ra khi sử dụng " tài khoản bạn chạy từ manuall y" so với định dạng được đặt thành " tài khoản người dùng mà phần mềm sao lưu thực thi nó ".

Bạn chỉ cần sử dụng set archdate=!archdate:/=-!thay vì set archdate=!archdate:.=-!thay thế " /bằng -" thay vì " .bằng -" do sự khác biệt định dạng ngày cho mỗi vấn đề bạn đang gặp phải mà bạn giải thích với logic hiện tại của mình.

Hơn nữa, bạn cũng nên cân nhắc sử dụng một cái gì đó phổ biến hơn một chút, chẳng hạn như wmic os get LocalDateTimeđể đặt biến không phụ thuộc vào định dạng ngày / bộ định vị trên mỗi hồ sơ tài khoản người dùng. Xem Locale-unwar% DATE% và% TIME% trong các tệp bó cho một số chi tiết.

Kịch bản

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:/=-!
  "c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

Tài nguyên khác

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.