我不知道如何准确描述我正在尝试做什么,但这里是一个示例批处理文件,演示了我无法弄清楚:
我有一个批处理文件.在该批处理文件中,我正在尝试创建一个目录:
Set CopyFrom = %~dp0
if Exist "%ProgramFiles(x86)" (
Set TargetDir = %ProgramFiles(x86)%\My Directory Name has spaces
)
md %TargetDir%\NewSubFolder
copy %CopyFrom%\SourceFile.zip %TargetDir%\NewSubFolder
Run Code Online (Sandbox Code Playgroud)
我的批处理文件在第4行失败Set TargetDir =...:
\My was unexpected at this time
Run Code Online (Sandbox Code Playgroud)
我假设这是因为我的路径名中有空格.我以为我可以用引号包装我的变量:
Set TargetDir = "%ProgramFiles(x86)%\My Directory Name has spaces"
Run Code Online (Sandbox Code Playgroud)
但是当我到达创建目录的行时,它失败了,因为%TargetDir%现在用引号括起来.md "%TargetDir%"\NewSubFolder
这可以修复,还是我应该写一个VBScript来解决问题?
我尝试了以下代码
use strict;
use warnings;
use Term::ReadPassword::Win32 qw(read_password);
my $pw = read_password('pw: ');
print "pw $pw\n";
my $x = <STDIN>;
print "x: $x\n";
Run Code Online (Sandbox Code Playgroud)
它确实要求输入密码并且不回应答案,但它会跳过它后面的<STDIN>.我想这是Term :: ReadPassword :: Win32中的一个错误,所以我想知道是否有另一个模块在Windows上运行良好?
我有一个第三方dll,我加载到不是我的软件,我正在使用AllocConsole()创建标准的Windows CLI窗口,所以我有一个简单的方法输出调试消息.
我的问题是,它忽略了任何类型的输入.我只是希望能够使用我分配的控制台,并使我能够给它一些输入.
这是groovy脚本:
param = args[0]
println(param)
Run Code Online (Sandbox Code Playgroud)
以下是我运行它的方法(Windows 7):
groovy test.groovy a&b
Run Code Online (Sandbox Code Playgroud)
我希望这个脚本打印a&b,但是'b'不会被识别为内部或外部命令,可操作程序或批处理文件.
我试图将参数(在我的情况下为a&b)放在引号中,但它没有帮助.使用双引号,脚本挂起.使用单引号我得到相同的错误,如没有任何引号.
问题:是否可以将带有&符号的字符串作为groovy脚本的命令行参数?
我想捕获另一个进程的输出(例如git status),对其进行处理,并使用所有样式(粗体、斜体、下划线)和颜色进行打印。进一步处理它对我来说非常重要String,我不想只打印它。
在 Unix 世界中,我认为这会涉及转义码,我不确定 Windows 世界,但这对我也很重要。
我知道如何在没有颜色的情况下做到这一点:
fn exec_git() -> String {
let output = Command::new("git")
.arg("status")
.output()
.expect("failed to execute process");
String::from_utf8_lossy(&output.stdout).into_owned()
}
Run Code Online (Sandbox Code Playgroud)
也许我应该改用spawn?
我有一个小型游戏应用程序,它是从Windows控制台(cmd.exe)启动的.我能够使用ANSI转义序列以任何所需的方式格式化文本.
我也很乐意将格式应用于input()-method中的文本,但我还没有找到一种方法.这是测试代码......
from colorama import init
init(autoreset=True)
RED = "\x1b[1;31;40m"
print(f"{RED}This text is red\n")
not_red = input(f"{RED}Insert some random stuff: ")
Run Code Online (Sandbox Code Playgroud)
在我的Windows控制台中,您将看到ANSI序列在输入语句中显示为一个简单的字符串:
而在我的Spyder IDE控制台中,它具有相反的效果:
任何人都可以向我解释不同控制台中显示的行为吗?有没有办法input()在Windows cmd控制台中格式化-text?这是我的程序正常运行的地方,我想让它更漂亮:-)
提前致谢!
python formatting string-formatting windows-console colorama
我在 Windows 10 上使用 git bash 2.32。
在更新到 2.32 后的 git bash 中,我看到用于显示日志的命令的奇怪行为:
git -c core.pager='less -S -F' log --all --decorate --oneline --graph
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我尝试使用“a dog”命令和less寻呼机配置为退出 EOF 并剪切长度超过当前屏幕宽度的行。但是在我更新到 2.32 之后,输出似乎在 80 个符号后被截断,这通常远小于实际屏幕宽度(如下图所示)。
我试图了解如何增加该限制,以便less截断长度超过 160 个符号的行,或者不适合当前屏幕的行。
注意:我将宽度更改为 160,现在echo $COLUMNS返回 160,但这并没有帮助。
考虑这个简单的 Go 程序,它演示了在 Go 中“分叉”后台进程的标准方法。当它运行时,它应该立即将自己发送到后台,在那里每秒将递增整数写入output.txt一次。它会一直运行,直到您手动杀死它。
这个程序在 Mac 和 Linux 上完美运行,但在 Windows 上有一个奇怪的行为:它似乎有效,因为我立即再次收到命令提示符,并且我的进程确实在后台运行并将这些整数写入 output.txt。但是,当我关闭终端窗口时,后台进程会被终止。
标准 cmd.exe 和使用 PowerShell 的新式 Windows 终端都会出现此问题。在 Mac 和 Linux 上不存在这样的问题,在终端关闭、ssh 注销等情况下它可以很好地生存。
我尝试使用 cmd.SysProcAttr 设置 syscall.CREATE_NEW_PROCESS_GROUP,但这没有什么区别。
我的问题是,当终端关闭时,是什么导致它在 Windows 上死掉以及如何让它停止?
package main
import (
"fmt"
"os"
"os/exec"
"time"
)
var childEnv = "__IS_CHILD"
func main() {
if os.Getenv(childEnv) == "" {
fork()
os.Exit(0)
}
for i := 0; ; i++ {
fmt.Println(i)
time.Sleep(time.Second)
}
}
func fork() {
outfile, err := os.Create("output.txt")
if err != nil {
panic(err) …Run Code Online (Sandbox Code Playgroud) 在 Windows 控制台应用程序中,可以ctrl+c使用以下命令捕获按下的按钮:
#include <stdio.h>\n#include <signal.h>\n\nvoid SigInt_Handler(int n_signal)\n{\n printf("interrupted\\n");\n}\n\nint main(int n_arg_num, const char **p_arg_list)\n{\n signal(SIGINT, &SigInt_Handler);\n getchar(); // wait for user intervention\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\xc3\x97这很有效,但如果用户按下关闭控制台窗口的十字键,它根本不起作用。有这方面的信号吗?
我需要这个的原因是我有一个 CUDA 应用程序,如果在计算某些内容时关闭它,它往往会导致计算机崩溃。该代码是多平台的,因此我更喜欢使用信号而不是SetConsoleCtrlHandler. 有办法吗?
我尝试Yo在 Windows 10 计算机上运行生成器,但当我按箭头键选择选项时它没有反应。我在 GitHub 上发现了这个问题并尝试更改loopback:relation,但对我来说没有用。也许只有 Windows 10 上有新问题。
我还尝试返回到旧版控制台,但这都没有解决问题。
如何在 Windows 10 上让 Yo 识别箭头键?
windows-console ×10
windows ×3
windows-10 ×2
ampersand ×1
batch-file ×1
c ×1
c++ ×1
cmd ×1
colorama ×1
command-line ×1
console ×1
formatting ×1
go ×1
groovy ×1
less ×1
passwords ×1
perl ×1
python ×1
rust ×1
signals ×1
terminal ×1
tty ×1
winapi ×1
yo ×1