File 如何更新批处理文件中定义的变量

File 如何更新批处理文件中定义的变量,file,batch-file,File,Batch File,下面是我的批处理文件中的代码: @echo off & setlocal set ver1="doc pic\ABC\" set ver2="C:\Users\elmo\Desktop\error4.png" E: cd %ver1% copy %ver2% 问题是我没有办法从我的程序中更新这些变量;有什么方法可以这样做吗?在父进程的进程开始时填充进程的环境变量。之后,不可能在正在运行的流程中更改或添加变量 因此,如果您拥有批处理文件并从中运行另一个程序,然后尝试从该程序更改批处理

下面是我的批处理文件中的代码:

@echo off & setlocal
set ver1="doc pic\ABC\" 
set ver2="C:\Users\elmo\Desktop\error4.png"
E:
cd %ver1%
copy %ver2% 

问题是我没有办法从我的程序中更新这些变量;有什么方法可以这样做吗?

在父进程的进程开始时填充进程的环境变量。之后,不可能在正在运行的流程中更改或添加变量

因此,如果您拥有批处理文件并从中运行另一个程序,然后尝试从该程序更改批处理文件的环境变量,则这是不可能的

如果您尝试另一种方法,即从另一个程序启动批处理文件,那么您可以通过在程序中首先设置批处理文件的环境变量来影响它们

编辑:正如您所说,您有一个包含所需信息的文本文件。最简单的方法是,如果该文本文件采用另一个批处理文件的外观,例如:

set ver1=foo
set ver2=bar
在这种情况下,您可以将其与

call foobar.cmd
如果它看起来像这样:

ver1=foo
ver2=bar
您可以使用
for/f
对其进行解析,并对每行运行
set
命令,从而使其工作起来类似:

for /f "delims=" %%L in (foobar.txt) do set "%%L"
如果只是看起来像这样:

foo
bar
然后需要做更多的工作(因为您只需要隐式地知道第一行是
ver1
,第二行是
ver2
):

现在,如果在解析该文本文件之前未定义
ver1
ver2
,则此操作有效。如果您只需要更新其值,则会变得更加混乱:

for /f "delims=" %%L in (foobar.txt) do (
  if not defined ver1updated (
    set "ver1=%%L"
    set ver1updated=1
  ) else if not defined ver2updated (
    set "ver2=%%L"
    set ver2updated=1
  )
)
set ver1updated=
set ver2updated=
尽管在您的特定情况下,您可以利用以下两种方式将文件读入变量,但它们在处理多行的方式上有所不同:

set /p ver1=<foobar.txt
for /f "delims=" %%L in (foobar.txt) do set ver2=%%L

set/p ver1=如果使用
set/p
选项,可以将变量设置为提示的结果

set /P ver1=Enter path:
这将允许(强制)用户输入变量。具体来说,将提示用户

Enter path:
然后,他们键入的内容将被放入ver1

注意,在本例中,用户将键入带有空格的内容。在语音标记中放置
%ver1
会更安全,所以它是
%ver1



要从外部文件加载,请尝试
set/p ver1=什么程序?你到底想干什么?另外,
@echa off
?感谢Joey的回复。让我再告诉你一些事情。我没有使用任何.NET技术来运行此批处理文件,我使用的是另一种名为sanscript的语言,它类似于VB6语法。它有一个函数,我可以使用它运行批处理文件,就像运行run命令一样。。我的意思是,如果我打开RUN prompt并用完整路径写入批处理文件名,然后输入,那么它将完成工作,我想知道我们是否可以在运行批处理文件时将参数传递给批处理文件?如果您正在从批处理文件运行外部程序,则可以解析其输出。或者,您可以将文件存储在已知位置,并让批处理文件读取它。所有选项都有点棘手,这取决于你能做什么(或愿意做什么)以及它需要有多可靠。我已经创建了包含这两个参数的文本文件,该文本文件将从我的程序中创建,每次都有新的/不同的值,现在我唯一关心的是从批处理文件中的文本文件中读取这两行,并更新ver1和ver2值。可能吗?哇。很多细节。我会试试你的方法,让你知道它是否有效。到那时再等。我必须说谢谢你。下次我会尽力提供尽可能多的信息。。谢谢你的提示:谢谢你,乔伊!在你的帮助和解释下,我完成了一件对我来说似乎不可能的事情。这对于我正在工作的应用程序来说是一件很棒的事情。@elmo如果它是正确的,请随意勾选它作为正确答案。如果没有,请提供更多信息,我可能会提供更多帮助。Splatter这是一个很好的信息,但在我的情况下,我不能强迫用户输入值。我在文本文件中有这些值,我可以直接从文本文件中读取吗?
Enter path:
@echo off
echo "Destination path (ver1.txt): " <ver1.txt
echo "Source path (ver2.txt): " <ver2.txt
echo "Please change the values in the text files as required."
pause
set /P ver1= <ver1.txt
set /P ver2= <ver2.txt