set /p 没有像宣传的那样工作

use*_*417 2 batch-file

我在将文件中的输入重定向到 set/p 时遇到问题

\n\n

这是我的脚本:

\n\n
@echo off\necho Reading: {%1}\ntype %1\necho(\necho Starting...\nset VAR=\nset /P VAR=<%1\necho VAR is {%VAR%}...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在其他地方读过(/sf/answers/547907041/),我正在使用的语法将起作用。它不是!

\n\n

这是我的输出:

\n\n
Reading: {Fruit.txt}\nPears\nApples\nOranges\nKiwi\nGrapes\nKumquat\n\nStarting...\nVAR is {\xc2\xa0\xe2\x96\xa0P}...\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么 - 给出了什么?

\n

dbe*_*ham 5

您的文件采用 Unicode (UTF16) 格式,SET /P 不适用于 Unicode。TYPE 命令确实适用于 Unicode,并将输出转换为 ANSI。您可以将 TYPE 的输出重定向到一个新的文本文件,然后您的 SET /P 将起作用。

@echo off
type %1>new.txt
set VAR=
set /P VAR=<new.txt
echo VAR is {%VAR%}...
Run Code Online (Sandbox Code Playgroud)

编辑

要获取第二行而不是第一行:

@echo off
type %1>new.txt
<new.txt (
  set /P VAR=
  set VAR=
  set /P VAR=
)
echo VAR is {%VAR%}...
Run Code Online (Sandbox Code Playgroud)