繁体   English   中英

如何批量读取文本文件到变量并将其作为参数传递给powershell脚本

[英]How to read a text file to a variable in batch and pass it as a parameter to a powershell script

我有一个生成报告的 powershell 脚本,并将它连接到 io.filesystemwatcher。 我正在努力提高错误处理能力。 我已经在 try-catch 循环中拥有报告生成功能(仅接收文件路径),该功能基本上会杀死 word、excel 和 powerpoint,如果失败,则再次尝试。 这似乎工作得很好,但我想嵌入另一个 try-catch 循环,如果它连续第二次失败,它将重新启动计算机并在重新启动后生成报告。

阅读本文后,我决定尝试修改注册表: https : //cmatskas.com/configure-a-runonce-task-on-windows/

我的计划是,在第二个 try-catch 循环中,我将创建一个名为 RecoveredPath.txt 的文本文件,文件路径是其唯一内容,然后添加如下内容:

Set-ItemProperty "HKLMU:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name '!RecoverReport' -Value "C:\...EmergencyRecovery.bat"

重启前。 在批处理文件中,我有:

set /p RecoveredDir=<RecoveredPath.txt
powershell.exe -File C:\...Report.ps1 %RecoveredDir%

当我尝试运行批处理脚本时,它不会产生任何错误,但似乎没有做任何事情。 我尝试添加 echo 语句,它将文本文件的值存储为变量,但似乎没有将其正确传递给 powershell。 我还尝试添加 -Path %RecoveredDir% 但这产生了错误(report.ps1 中的参数名为 $Path)。

我做错了什么?

一个潜在的问题是,不将%RecoveredDir%"..."会破坏包含空格和其他特殊字符的路径。

然而,更大的问题是,使用文件名RecoveredPath.txt意味着该文件将在当前目录中的任何目录中查找

在评论中,您声明批处理文件和输入文件RecoveredPath.txt都位于您的桌面文件夹中。

但是,重要的不是批处理文件的位置,而是进程的当前目录- 当批处理文件在启动时自动运行时,这很可能不是您的桌面。

鉴于批处理文件和输入文件位于同一文件夹中,并且您可以使用%~dp0 (包括尾随\\引用批处理文件的完整文件夹路径,请修改您的批处理文件,如下所示:

set /p RecoveredDir=<"%~dp0RecoveredPath.txt"
powershell.exe -File C:\...Report.ps1 "%RecoveredDir%"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM