استرجاع التعبير مع EXE في ملفات البرنامج

StackOverflow https://stackoverflow.com/questions/1917507

  •  20-09-2019
  •  | 
  •  

سؤال

أحاول تشغيل أمر PowerShell للاتصال بسعة 7 zip إلى ادمج مجلد باستخدام الأمر التالي:

$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command

يتم بالفعل تعيين المتغيرات التي يتم تغذيةها بحوالي $ sevenzip هو "c: program 7-zip 7z.exe"

هذا لا يعمل وأحاول أن أعمل أفضل طريقة لاستدعاء 7 - الرمز البريدي من PowerShell. الأفكار؟

هل كانت مفيدة؟

المحلول

لقد قضيت نفس المشكلة من قبل. هذا رمز (تقريبا) مباشرة من برنامج نصي احتياطي لاستخدامه حاليا:

[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;

& $pathToZipExe $arguments;

لقد حصلت على عادة استخدام مجموعة وسيطة مع مشغل المكالمات، يبدو أن أكثر قوة من الأساليب الأخرى.

نصائح أخرى

لا تحتاج إلى استخدام Invoke-Expression - استخدم فقط مشغل الاحتجاج (Call) & لاستدعاء سلسلة تسمي الأمر لتنفيذه. لاحظ أنك تريد الاحتفاظ بالمعلمات منفصلة في هذه الحالة، أي أن السلسلة SevenZip يجب أن تكون مجرد طريق EXE على سبيل المثال:

&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName

أنت في الحقيقة لا تحتاج إلى تعبير الدعوى. يمكنك ببساطة استدعاء الأمر باستخدام Ampersand مثل:

&$Command

ولكن هناك أيضا CMDlet Start-process التي قد تكون مناسبة أفضل لما تحاول القيام به. عن طريق تنفيذ الأمر كسلسلة أعلاه، فأنت عرضة للأخطاء إذا كان SevenZip $ يحتوي على مسافات ولا يتم نقله. بدلا من ذلك أود استخدام:

Start-Process $SevenZip "...rest..."

ركضت في هذه المشكلة كذلك، كان هنا حلاي.

invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "

كنت قادرا على مغادرة السمعينات الحميات الخاصة بي خارج عروض الأسعار الفردية التي تشير إلى exe الخاص بي، وأعتقد أن هذه ربما هي أسهل طريقة لاستدعاء exe مع المعلمات باستخدام التعبير عن الاستدعاء.

اسمحوا لي أن أخمن، إنه يحاول استدعاء "C: program"؟

لست متأكدا من بناء الجملة الصحيح ل PS، ولكن ستحتاج إلى القيام بشيء حيال ذلك الفضاء.

تناسبني:

$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName

Write-Host "Running: $command"

Invoke-Expression $command

يمكنك أيضا استخدام أوامر MS-DOS من داخل برنامج نصي Windows PowerShell.

لقد أحببت دائما الأمر بدء تشغيل CMD.EXE، مما يتيح لك بدء أمر بالتوازي.

لذا بدء تشغيل 7 zip الخاص بك، ضع الأمر التالي في البرنامج النصي PowerShell الخاص بك:

    cmd.exe /c start <your 7-zip command like in MS-DOS> 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top