Joh*_*ant 66 windows batch-file
我正在开发一个Windows批处理文件,它将三个文本文件bcp到SQL Server中.如果在生产中出现问题,我希望能够覆盖文件名.所以我想做这样的事情.
bcp.exe MyDB..MyTable1 in %1 -SMyServer -T -c -m0
bcp.exe MyDB..MyTable2 in %2 -SMyServer -T -c -m0
bcp.exe MyDB..MyTable3 in %3 -SMyServer -T -c -m0
Run Code Online (Sandbox Code Playgroud)
我希望能够为所有三个文件输入默认名称,如果未提供位置参数,则使用该名称.这个想法要么是要执行
myjob.bat
Run Code Online (Sandbox Code Playgroud)
没有参数,并使用默认值或执行
myjob.bat "c:\myfile1" "c:\myfile2" "c:\myfile3"
Run Code Online (Sandbox Code Playgroud)
并让它使用这些文件.我无法弄清楚如何判断%1,%2和%3是否存在和/或是否为空.我也不知道如何有条件地设置这些值.这可能吗?任何建议,将不胜感激.
crb*_*crb 122
要测试是否存在命令行参数,请使用空括号:
IF [%1]==[] echo Value Missing
Run Code Online (Sandbox Code Playgroud)
要么
IF [%1] EQU [] echo Value Missing
Run Code Online (Sandbox Code Playgroud)
IF上的SS64页面将在这里为您提供帮助.在"%1存在吗?"下.
你不能设置位置参数,所以你应该做的是做类似的事情
SET MYVAR=%1
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据其内容重新设置MYVAR.
Lar*_*ryF 28
给出的答案都是正确的,但我确实有点不同.你可能想要考虑一些事情......
启动批处理:
SetLocal
Run Code Online (Sandbox Code Playgroud)
结束它
EndLocal
Run Code Online (Sandbox Code Playgroud)
这将使您的所有"SET"仅在当前会话期间保持有效,并且不会留下名为"FileName1"的变量或在运行期间设置的任何其他变量,这可能会干扰下一次运行批处理文件那么,你可以这样做:
IF "%1"=="" SET FileName1=c:\file1.txt
Run Code Online (Sandbox Code Playgroud)
另一个技巧是如果你只提供1个或2个参数,使用SHIFT命令来移动它们,所以你要找的那个总是在%1 ...
例如,处理第一个参数,移动它们,然后再次执行.这样,你就不会硬编码%1,%2,%3等......
在Windows批量处理器是很多更强大的比人们给它的信贷..我已经做了一些疯狂的事情吧,包括计算昨天的日期,甚至是跨月份和年份的界限,包括闰年和本地化等.
如果你真的想要创造性,你可以在批处理器中调用函数......但这真的是为了不同的讨论... :)
哦,不要把你的批处理文件命名为.bat ..它们现在是.cmd .. 呵呵..
希望这可以帮助.
小智 28
正确的做法是使用"if defined"语句,用于测试变量的存在.例如:
IF DEFINED somevariable echo Value exists
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,应使用否定形式:
IF NOT DEFINED somevariable echo Value missing
Run Code Online (Sandbox Code Playgroud)
PS:变量名称应该在没有"%"字符的情况下使用.
Sta*_*zev 13
rem set defaults:
set filename1="c:\file1.txt"
set filename2="c:\file2.txt"
set filename3="c:\file3.txt"
rem set parameters:
IF NOT "a%1"=="a" (set filename1="%1")
IF NOT "a%2"=="a" (set filename2="%2")
IF NOT "a%3"=="a" (set filename1="%3")
echo %filename1%, %filename2%, %filename3%
Run Code Online (Sandbox Code Playgroud)
但请注意引号字符,您可能在变量中需要或不需要它们.
| 归档时间: |
|
| 查看次数: |
160058 次 |
| 最近记录: |