【问题标题】:If file exists get its contents with batch script如果文件存在,则使用批处理脚本获取其内容
【发布时间】:2021-11-14 20:28:52
【问题描述】:

我想通过批处理脚本访问 JSON 文件的内容以对其进行一些处理。我的脚本是这样的:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion
@setlocal enableextensions
@cd /d "%~dp0"
...
...
...
set FILEPATH=C:\\PROGRA~1\\Setup\\setup.json
IF EXIST "%FILEPATH%" (
set string=
for /f "delims=" %%x in (C:\\PROGRA~1\\Setup\\setup.json) do set "string=!string!%%x"
echo !string!
//do some processing on string variable
)
...
...

此脚本应返回文件内容,但它会打印此脚本中设置的所有环境变量和变量。

echo !string! 返回 ECHO 关闭(表示字符串为空)。

如果我在if() 之外运行此代码,那么它会给出正确的结果(即文件内容)。

set string=
for /f "delims=" %%x in (C:\\PROGRA~1\\Setup\\setup.json) do set "string=!string!%%x"
echo !string!

那么我在这里错过了什么?

【问题讨论】:

  • 您分配了FILEPATH,但不使用它,if exist 除外。有什么特别的原因可以将所有反斜杠加倍吗?您可以通过为它指定两个参数来将两个 setlocal 命令合并为一个...
  • @aschipfl 实际上我首先检查 setup.json 所在的目录是否存在。所以我需要先检查目录是否存在,并在此基础上完成一些操作。但它也有助于确定 setup.json 是否存在。因此,如果 "C:\\PROGRA~1\\Setup\\" 存在,那么 setup.json 也将存在。在这里我写了 ``` set FILEPATH=C:\\PROGRA~1\\Setup\\setup.json ``` 以避免问题标题和我在脚本中所做的任何混淆。我使用了“\\”,因为带有“\”的路径没有得到解决并给我错误。
  • 您确定PROGRA~1 是正确的吗?除非绝对必要,否则不应使用短名称(此处没有必要:for /f "usebackq delims=" %%x in ("C:\PROGRAM FILES\Setup\setup.json") do...for /f "usebackq delims=" %%x in ("C:\PROGRAM FILES (x86)\Setup\setup.json") do...
  • @Stephan 是的。我已经试过了。但仍然只是打印出环境变量,因此认为空白可能存在问题,这就是我使用 PROGRA~1 的原因。
  • @Stephan 我已将 Setup 文件夹放在“Program Files”中,因此在 Program Files(x86) 中查找它们毫无意义。

标签: windows file batch-file cmd


【解决方案1】:

我找不到使用“在 if-exist 块中使用 for 循环读取文件”的根本问题,但我找到了使用“goto”的解决方法声明。

set FILEPATH=C:\\PROGRA~1\\Setup\\setup.json
IF EXIST "%FILEPATH%" (goto getJson)
:getJson
set string=
for /f "usebackq delims=" %%x in ("C:\Program Files\Setup\setup.json") do set "string=!string!%%x"
echo !string!

这段代码给出了预期的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多