下面是我的批处理文件代码:在批处理文件中定义如何更新变量
@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
第一个将只存储文件的第一行,而第二种方法将更新文件中的每一行的变量,在最后线的值留下ver2
。由于只有两行开始,这也是一个选项分开它们。但是在编写批处理文件时,我通常尽量不要混用习语,或者至少提供解释的评论。
正如你所看到的,它可能会变得有点复杂。通常对于这样的问题,如果你确切地说明了可以生成(如果有限制)或者你的输入和输出格式是什么格式(你可以编辑你的问题:-))。
感谢乔伊的回应。让我告诉你更多的东西。我没有使用任何.NET技术来运行这个批处理文件,我使用了另一种名为sanscript的语言,它与VB6语法相似。它有一个功能,我可以使用它运行批处理文件,就像在RUN命令上运行一样..我的意思是如果我打开RUN提示并用完整路径写入批处理文件名并输入然后它会完成这项工作,我想知道可以我们将参数传递给批处理文件,而像运行它一样? – elmo 2013-02-27 07:40:03
如果您从批处理文件运行外部程序,则可以解析其输出。或者您可以将文件存储在已知的位置,并让批处理文件读取它。所有的选项都有点难以解决,它取决于你可以(或愿意)做什么以及它需要的可靠程度。 – Joey 2013-02-27 09:15:52
我已经创建了具有两个参数的文本文件,这个文本文件将从我的程序中创建,每次都会有新的/不同的值,现在我唯一的担心就是从批处理文件中的文本文件中读取两行文件,并更新ver1和ver2值。可能吗? – elmo 2013-02-27 09:34:31
如果使用set /P
选项,则可以将该变量设置为提示的结果。
set /P ver1=Enter path:
这将允许(强制)用户输入变量。具体来说,会提示用户
Enter path:
然后,无论他们键入后将放入ver1。
注意,在这个例子中,用户可以输入一些空格的东西。你会更安全地把%ver1
放在语音标记中,所以它是"%ver1"
。
要从外部文件加载,请尝试set /P ver1= <file.txt
。您可能想要检查文件是否存在if exist file.txt (set /P ver1= <file.txt)
如果您希望允许用户在编辑文件之前更改文件,请事先简单调用pause
并提示用户更改所需的文本文件。
例如,如果你想让用户看到什么路径设置,使他们可以先改变它们,你可以试试... ...
@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
这已经有一段时间,因为我确实是这样的事情,所以我可能需要检查它,但我相信这应该工作。
什么程序?你究竟想要做什么?另外,'@echa off'? – LittleBobbyTables 2013-02-26 13:45:52