การใช้ไฟล์. bat เพื่อดึงสตริงจากไฟล์ข้อความภายในโฟลเดอร์ zip


0

ดังนั้นโปรดอดทนกับฉัน นี่เป็นเพียงไฟล์แบตช์ที่สองที่ฉันเคยเขียนและโพสต์ครั้งแรกของฉันที่ใดก็ได้ใน StackExchange

ฉันกำลังเขียนไฟล์แบตช์ที่แจ้งให้เซิร์ฟเวอร์ระยะไกลเรียกใช้ HP Array Diagnostic Utility และดึงรายงานกลับไปที่คอมพิวเตอร์ของฉัน ฉันตื่นเต้นมากเพราะทำงานได้ดีส่วนใหญ่ ฉันมีปัญหาเล็กน้อยหนึ่งข้อ ฉันพยายามดึงหมายเลขซีเรียลจากไฟล์ข้อความภายในโฟลเดอร์ zip ที่มาจากเซิร์ฟเวอร์ระยะไกล เมื่อฉันดึงข้อมูลจากไฟล์ข้อความทดสอบที่ไม่ได้อยู่ในโฟลเดอร์บีบอัดส่วนหนึ่งของรหัสนี้ใช้งานได้ มันไม่ทำงานเมื่อไฟล์ข้อความอยู่ในโฟลเดอร์ zip แต่ มีวิธีที่จะทำให้เรื่องนี้ทำงานได้หรือไม่?

นี่คือส่วนของรหัสที่เป็นปัญหา:

FOR /f "tokens=1-4 delims= " %%A IN ("%userprofile%\Desktop\report.zip\report.txt") DO (
 IF %%A ==Chassis (
    SET "sn=%%D"
    ECHO %sn%
 )
)

ขอบคุณ.


ขยายไฟล์ zip ไปยังโฟลเดอร์ temp อ่านไฟล์ลบโฟลเดอร์ temp สำหรับความช่วยเหลือเกี่ยวกับสิ่งที่เห็น Windows 7 มีการคลายซิปที่บรรทัดคำสั่งติดตั้งหรือไม่
Ƭᴇcʜιᴇ007

คำตอบ:


0

สารละลาย

แม้ว่าที่จริงแล้ว Windows จะแสดง .zip เก็บถาวรเป็นโฟลเดอร์ที่บีบอัดพวกเขาไม่ได้ จริง โฟลเดอร์ทั้งหมด ซึ่งหมายความว่าคุณไม่สามารถเข้าถึงเนื้อหาที่ถูกบีบอัดได้โดยตรงจนกว่าคุณจะแตกไฟล์ที่อื่น

Windows ไม่ได้จัดเตรียมยูทิลิตีบรรทัดคำสั่งไว้ในการแตกไฟล์บีบอัด ด้วย VBScript เพียงเล็กน้อยคุณสามารถข้ามข้อ จำกัด นี้ได้:

REM^ &@echo off
REM^ &if not exist "%~f1" exit /b 2
REM^ &md "%temp%\%~nx1" 2>nul
REM^ &cscript /nologo /e:vbscript "%~f0" "%~f1" "%temp%\%~nx1"
REM^ &exit /b

Set sa = CreateObject("Shell.Application")
Set files = sa.NameSpace(WScript.Arguments(0)).Items
Set target = sa.NameSpace(WScript.Arguments(1))

For Each file In files
target.CopyHere file, 1556
Next

มันทำงานอย่างไร

สคริปต์ด้านบนเป็นลูกผสม (ขอบคุณ dbenham และ jeb สำหรับแนวคิด) และมีทั้งชุดคำสั่งและ VBScript ปกติในไฟล์เดียว

สคริปต์ยอมรับพารามิเตอร์เดียวเท่านั้นซึ่งเป็นเส้นทางเก็บถาวร ในตอนแรกสคริปต์จะตรวจสอบว่าไฟล์ที่ระบุนั้นมีอยู่จริงหรือไม่แล้วสร้างโฟลเดอร์ย่อยตามชื่อไฟล์เก็บถาวรในโฟลเดอร์ชั่วคราว

รหัส VBScript จะถูกดำเนินการแล้ว แต่ละไฟล์ในไฟล์เก็บถาวรจะถูกคัดลอก (แยก) ไปยังโฟลเดอร์เป้าหมาย ค่าตัวเลือกคือ 1556ซึ่งสอดคล้องกับ 4 + 16 + 512 + 1024 และจำเป็นต้องทำให้การดำเนินการทั้งหมดไม่ต้องใส่ข้อมูลโดยการข้ามข้อความแจ้งยืนยัน

ตัวอย่างการใช้งาน

@echo off
setlocal

set archive=report.zip
call UnzipHelper.cmd "%userprofile%\Desktop\%archive%" >nul
pushd "%temp%\%archive%"

REM your code here

popd
rd /s /q "%temp%\%archive%" 2>nul

pause
endlocal & exit /b

อ่านเพิ่มเติม


ฉันไม่เคยทำ VBScript มาก่อน ขอบคุณสำหรับข้อมูลและแหล่งข้อมูล มีอะไรใหม่ให้เล่นด้วย
duzzy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.