我知道它%0包含批处理脚本的完整路径,例如c:\path\to\my\file\abc.bat
我愿意path等于c:\path\to\my\file
我怎么能实现这一目标?
在Windows中,如何访问运行批处理文件时传递的参数?
例如,假设我有一个名为的程序hello.bat.当我进入hello -aWindows命令行时,如何让我的程序知道-a作为参数传递?
如何从Windows命令窗口中的任何位置访问.exe文件?是否需要输入一些注册表项?
我想从Windows批处理文件中调用一个jar文件.一个要求是能够将所有批处理文件参数原样传递给jar文件调用.例如,
必需的命令行:
foo.bat --flag1=x --flag2=y --flag3=z
Run Code Online (Sandbox Code Playgroud)
批处理文件foo.bat应该调用foo.jar如下:
java -jar foo.jar --flag1=x --flag2=y --flag3=z
Run Code Online (Sandbox Code Playgroud)
如何使批处理文件执行此操作?
我可以用%做一些批量变量魔术来做到这一点,但是有更简单的方法吗?
一个熟悉windows/dos批处理脚本的人会认识到这一行:
@echo off
Run Code Online (Sandbox Code Playgroud)
很多天以来,我对这种情绪感到满意,这@就是为什么echo off要写在批处理的顶部,就是这样.
然而,最近我就翻过这样一行:
@php foo bar
Run Code Online (Sandbox Code Playgroud)
@call \\network\folder\batch.bat
Run Code Online (Sandbox Code Playgroud)
这加强了我的怀疑,@它不仅仅是echo模式切换.但是@没有在Windows XP中列出:命令行参考AZ我试图用作参考,因此我不确定如何找到关于此的确切信息:
@批处理的标志是什么,它的术语是什么,它有什么作用?
是否可以编写一个在Windows(视为.bat)和Linux(通过Bash)中执行的脚本文件?
我知道两者的基本语法,但没有弄清楚.它可能会利用一些Bash晦涩的语法或一些Windows批处理器故障.
要执行的命令可能只是执行其他脚本的一行.
动机是只为Windows和Linux提供一个应用程序启动命令.
更新:对系统的"本机"shell脚本的需求是它需要选择正确的解释器版本,符合某些众所周知的环境变量等.安装CygWin等其他环境不是更可取的 - 我想保持这个概念"下载并运行".
Windows要考虑的唯一其他语言是Windows Scripting Host - WSH,默认情况下自98开始预设.
在以下示例中,我想从父批处理文件中调用子批处理文件,并将所有剩余参数传递给子代.
C:\> parent.cmd child1 foo bar
C:\> parent.cmd child2 baz zoop
C:\> parent.cmd child3 a b c d e f g h i j k l m n o p q r s t u v w x y z
Run Code Online (Sandbox Code Playgroud)
在parent.cmd中,我需要从参数列表中删除%1,并仅将剩余参数传递给子脚本.
set CMD=%1
%CMD% <WHAT DO I PUT HERE>
Run Code Online (Sandbox Code Playgroud)
我已经调查过使用SHIFT和%*,但这不起作用.当SHIFT将位置参数向下移动1时,%*仍然指向原始参数.
有人有主意吗?我应该放弃并安装Linux吗?
我正在评估pylint作为源代码检查器,我想在一行上自定义最大字符数.
我想使用配置文件.由于--generate-rcfile命令,我已经生成了一个模板,并且我已经进行了修改.
我正在尝试运行pylint --rcfile = myfile.rc,但我可以看到我的更改未被pylint考虑在内.我已经为我的文件尝试了不同的位置:\ Python26\Scripts \和pylint.d在我的用户文件夹中没有任何成功.
有谁知道我做错了什么?
是否可以使用pylint-gui的配置文件?我也不能这样做?
继续如何在批处理文件中传递命令行参数如何通过完全指定参数来获取其余参数?我不想使用SHIFT,因为我不知道可能有多少参数,并且如果可以的话,我们希望避免对它们进行计数.
例如,给定此批处理文件:
@echo off
set par1=%1
set par2=%2
set par3=%3
set therest=%???
echo the script is %0
echo Parameter 1 is %par1%
echo Parameter 2 is %par2%
echo Parameter 3 is %par3%
echo and the rest are %therest%
Run Code Online (Sandbox Code Playgroud)
跑步mybatch opt1 opt2 opt3 opt4 opt5 ...opt20会产生:
the script is mybatch
Parameter 1 is opt1
Parameter 2 is opt2
Parameter 3 is opt3
and the rest are opt4 opt5 ...opt20
Run Code Online (Sandbox Code Playgroud)
我知道%*给出所有参数,但我不是前三个(例如).
正如在另一个线程中所讨论的如何避免cmd.exe解释shell特殊字符,如<> ^ 从命令行获取所有参数并不容易.
一个简单的
set var=%1
set "var=%~1"
Run Code Online (Sandbox Code Playgroud)
如果你有这样的要求,还不够
myBatch.bat abc"&"^&def
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,但它需要一个临时文件,它也不是防弹.
@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
@echo on
for %%a in (4) do (
rem #%1#
)
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
Run Code Online (Sandbox Code Playgroud)
它失败了像myBatch.bat%a,它显示4而不是%a
在这种情况下,简单的回声%1将起作用.
这显然是for循环,但我不知道如何改变它.
也许存在另一个简单的解决方案
我不需要这个来解决实际问题,但我喜欢在每种情况下都是防弹的解决方案,而不仅仅是在大多数情况下.
batch-file ×7
windows ×7
arguments ×2
cmd ×2
parameters ×2
at-sign ×1
bash ×1
dos ×1
escaping ×1
pylint ×1
python ×1
shell ×1
terminology ×1