系统找不到指定的路径-批处理到exe

问题描述 投票:0回答:1

早上好。我编写了一个批处理文件,通过audit.csv 文件更新组策略。之前我通过

auditpol
更改了政策,但这些更改并没有持续存在,所以我想出了这个解决方案。

:: Write the correct audit settings to audit.csv
set "auditFile="C:\Windows\System32\GroupPolicy\Machine\Microsoft\Windows NT\Audit\audit.csv""

echo Machine Name,Policy Target,Subcategory,Subcategory GUID,Inclusion Setting,Exclusion Setting,Setting Value > %auditFile%
echo ,System,Audit Credential Validation,{0cce923f-69ae-11d9-bed3-505054503030},Success and Failure,,3 >> %auditFile%
…

它还做了一些其他的事情,但这就是我收到错误的地方。

昨天,像常规批处理脚本文件一样运行它,效果很好。现在我收到

The system cannot find the path specified.
错误。我看过一些有同样问题的帖子,解决方案是运行
cmd /c file.bat
,它现在对我不起作用。创建帖子时,我没想到运行批处理文件会出现此问题。当我昨天测试时,批处理文件工作正常,但是当我转换为 exe(使用 PowerArchiver 和 iexpress)时,我收到了错误。所以我不知道为什么它在 .bat 版本中不起作用,但我想如果我可以解决这个问题,它应该可以修复转换后的 exe。

我的主要问题是为什么我会收到该错误?是因为 echo 命令吗?是否由于我尝试访问的文件而导致错误?是权限问题吗?

batch-file cmd exe
1个回答
0
投票

使用

Windows 文件资源管理器
双击批处理文件时,批处理文件由存储在
cmd.exe
中的 64 位 %SystemRoot%\System32 执行。在这种情况下,目录
%SystemRoot%\System32\GroupPolicy\Machine\Microsoft\Windows NT\Audit
最有可能存在(不在我的 Windows 计算机上)。

但是将批处理文件打包到 32 位可执行文件中,该文件在执行时将其提取到

%TEMP%
或在
%TEMP%
中临时创建的子目录,然后运行 Windows 命令处理器来执行临时提取的批处理文件,32-
cmd.exe
中存储的位
%SystemRoot%\SysWOW64
由于Windows文件系统重定向器而被执行。

x86 应用程序执行环境中活动的文件系统重定向器将对文件

%SystemRoot%\System32\GroupPolicy\Machine\Microsoft\Windows NT\Audit\audit.csv
的写入访问重定向到
%SystemRoot%\SysWOW64\GroupPolicy\Machine\Microsoft\Windows NT\Audit\audit.csv
,并且在这种情况下,文件
audit.csv
的整个目录树很可能不存在。

解决方案是使用此代码:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Define Windows system folder path and make sure the right path is used
rem if this batch file is executed on 64-bit Windows in 32-bit environment.
set "SystemFolder=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%" == "" if exist %SystemRoot%\Sysnative\cmd.exe set "SystemFolder=%SystemRoot%\Sysnative"
set "AuditFilePath=%SystemFolder%\GroupPolicy\Machine\Microsoft\Windows NT\Audit"

rem Create the directory with suppressing the error message on missing
rem permissions to create this directory or on directory existing already.
md "%AuditFilePath%" 2>nul
if not exist "%AuditFilePath%\" (
    echo ERROR: Failed to creeate the directory:
    echo        %SystemRoot%\System32\GroupPolicy\Machine\Microsoft\Windows NT\Audit
    echo        The batch file "%~nx0" must be run as administrator.
    goto EndBatch
)

rem Write the correct audit settings to file audit.csv.
set "FullAuditFileName=%AuditFilePath%\audit.csv"
(
echo Machine Name,Policy Target,Subcategory,Subcategory GUID,Inclusion Setting,Exclusion Setting,Setting Value
echo ,System,Audit Credential Validation,{0cce923f-69ae-11d9-bed3-505054503030},Success and Failure,,3
) >"%FullAuditFileName%"

rem More commands to execute.

:EndBatch
endlocal

此批处理文件还会创建文件

audit.csv
,其中包含两个 CSV 行,且两行末尾均没有尾随空格。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • call /?
    ... 解释
    %~nx0
    ... 批处理文件的名称+扩展名
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • md /?
  • rem /?
  • set /?
  • setlocal /?

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.