cmd
我正在尝试使用命令、开关运行一系列命令/k
,并&&
分离序列中的每个命令。
例如,我想运行此命令来切换到一个文件夹,然后切换到下一个文件夹:
cmd /k "cd C:\Program Files\Microsoft Office" && "cd C:\Program Files\Windows Mail"
但这不起作用 - 它只将文件夹更改为 Microsoft Office,然后停止。
我怎样才能完成这个任务?
编辑:
实际上,@señor-csmasmas 是正确的 - 我之前的例子并没有真正说明这个问题。
当我运行路径中带有空格的命令,然后运行更改目录的命令时,问题实际上就出现了。
例如,如果你创建一个复制文件的 bat 文件(我们称之为 copyfile.bat),并将该 bat 文件放在带空格的文件夹中,然后像这样调用 cmd 命令:
C:\windows\system32\cmd.exe /k "C:\Test Folder\copyfile.bat" && "cd C:\Some Other Folder"
您将看到当前目录并没有改变为 C:\Some Other Folder。
答案1
// 编辑
当我运行路径中带有空格的命令,然后运行更改目录的命令时,问题实际上就出现了。
例如,如果你创建一个复制文件的 bat 文件(我们称之为 copyfile.bat),并将该 bat 文件放在带空格的文件夹中,然后像这样调用 cmd 命令:
C:\windows\system32\cmd.exe /k "C:\Test Folder\copyfile.bat" && "cd > C:\Some Other Folder" :: try :: C:\windows\system32\cmd.exe /k "call "C:\Test Folder\copyfile.bat" && cd /d "C:\Some Other Folder""
编辑 //
cmd /k "cd "C:\Program Files\Microsoft Office" && cd "C:\Program Files\Windows Mail""
尝试想象一下你的命令和操作符在必要时用双引号括起来的样子cmd /k "command "with" operator and another command "with""
cmd /k "
cd /d "C:\Program Files\Microsoft Office"
&&
cd /d "C:\Program Files\Windows Mail"
"
cmd /k " command "path #1" && command "path #2" "
答案2
Windows 之前是 DOS,之前是 CP/M。
CP/M 通常只运行单个命令。
DOS 逐渐拥有了为不同进程划分 CPU 使用率的能力,因此你可以在主级别运行具有自己环境的辅助命令。
因此,Windows 继承了对几种调用命令进程的方式的需求,因此 3 个主开关仍然存在。
新来的孩子是 cmd.exe,它的默认行为与 /K 相同(保持活动状态),您可以退出回到当前 cmd 级别这是你的问题
然而我们经常想让 cmd 运行并返回C鞋底C控制 &C继续这样/c
那么第三个是什么?它没有列出!
所以 /c 和 /r 是同义词,都充当运行和继续
好的,这只是一个转移话题,并没有回答可能与此问题类似的问题,即一行中的命令在使用前运行(非延迟执行)
我们可以预期 %CD% 会报告 c:\users,但显然没有
所以你的回答
如果你想移动到另一个位置并启动一个新的 Konsole,那么你需要更改顺序和方法
你有
cmd /k "cd C:\Program Files\Microsoft Office" && "cd C:\Program Files\Windows Mail"
因此,这是有效的(可能有点过度?)
cmd /c start " " cmd /r "cd /d "c:\program files" && cmd /k" && cd /d "c:\users"
我们启动一个将运行的辅助进程cd
,/k
然后切换到另一个 cwd,反过来也应该可以工作
所以尝试这个答案
start "Office Dir" cmd /k "cd C:\Program Files\Microsoft Office" && cd "C:\Program Files\Windows Mail"
可选择添加 && dir
在测试期间进行验证
然后使用此顺序
cd /d "C:\Program Files\Microsoft Office" && start "office" cmd /k && cd /d "C:\Program Files\Windows Mail" && start "Mail" cmd /k