在cmd(和bash)中,管道" |"以第一个命令输出的原始格式(作为字符串)将输出推送到另一个命令.
在PowerShell中,管道中出现的所有内容都是一个对象(即使字符串是一个字符串对象).
因此,在PowerShell命令窗口中运行时,某些命令会失败,而不是Windows命令窗口.
例:
dir c:\windows | gzip > test.gz
Run Code Online (Sandbox Code Playgroud)
在Windows命令提示符窗口中运行此命令时,它可以正常工作 - C:\ windows的目录列表被压缩到test.gz文件中.
PowerShell中的相同命令失败,因为PowerShell不使用cmd样式的管道并将其替换为PowerShell管道(使用文件系统项目数组).
问:如何在PowerShell中禁用默认管道行为,以使传统Windows命令在PowerShell中的工作方式相同?
我尝试`在管道" `|" 之前使用转义字符" ",但它没有用.我也尝试过invoke-expression -command "command with | here",但也失败了.
基本上我想将我的文件格式从Unix更改为DOS.在Perl中有什么办法吗?非常感谢!
我想删除目录中小于特定大小的所有文件.有谁知道是否有Windows命令会这样做?就像是del *.* where size<3kb
我目前正在这样做:
for /F %%A in ("*.pdf") do If %%~zA LSS 20103409 del %%~fA
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
C:\Documents and Settings\agordon\Desktop\test>If 6440450 LSS 20103409 del C:\Do
cuments and Settings\agordon\Desktop\test\US Tox 01-06-11.pdf
The system cannot find the path specified.
Run Code Online (Sandbox Code Playgroud)
...即使该PDF文件足够小,可以删除.
我究竟做错了什么?
这实际上是有效的:
FOR %%F IN (*.pdf) DO (
IF %%~zF LSS 20103409 DEL %%F
)
Run Code Online (Sandbox Code Playgroud)
但是它没有识别文件名,因为它们有空格!如何在该脚本中将Windows名称转换为"DOS"名称?例如,Windows名称是file name.pdf我可能需要转换为"DOS",它看起来像这样file_name.pdf或类似的东西.
我通过命令行(win7 cmd)并行执行4个任务:
start defrag /A c:
start defrag /A d:
start defrag /A e:
start defrag /A f:
dir
Run Code Online (Sandbox Code Playgroud)
但是,该dir命令在第一行之后执行.
我希望在dir完成所有4个命令后执行该命令.
我该怎么做 ?
我知道我可以在以下目录中连接文件:
copy /b *.txt all.txt
Run Code Online (Sandbox Code Playgroud)
但我还有一个问题.我应该如何在每个文件之间添加新行?我发现这是copy/b命令的问题.想想这种情况:
content of a.txt: --ALTER TABLE table1 ...;
content of b.txt: CREATE TABLE table2 ...;
content of c.txt: DROP TABLE table3 ...;
Run Code Online (Sandbox Code Playgroud)
我希望连接的结果是
--ALTER TABLE table1 ...;
CREATE TABLE table2 ...;
DROP TABLE table3 ...;
Run Code Online (Sandbox Code Playgroud)
代替
--ALTER TABLE table1 ...;CREATE TABLE table2 ...;DROP TABLE table3 ...;
Run Code Online (Sandbox Code Playgroud)
,其中的内容可以被视为评论.
我有以下代码,基本上创建一个DynamicAssembly有两种类型,每种类型都有一个公共方法.
var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly
(new AssemblyName("TestAssembly"), AssemblyBuilderAccess.Run);
var module = assembly.DefineDynamicModule("Main");
var type1 = module.DefineType("type1");
var method1 = type1.DefineMethod
(
"Method1", MethodAttributes.Public, typeof(void), null
);
var gen = method1.GetILGenerator();
gen.Emit(OpCodes.Ret);
var t1 = type1.CreateType();
var createdMethod1 = t1.GetMethod("Method1");
var type2 = module.DefineType("type2");
var method2 = type2.DefineMethod
(
"Method2", MethodAttributes.Public, typeof(void), null
);
byte[] ilCodes = new byte[5];
ilCodes[0] = (byte)OpCodes.Jmp.Value;
ilCodes[1] = (byte)(createdMethod1.MetadataToken & 0xFF);
ilCodes[2] = (byte)(createdMethod1.MetadataToken >> 8 & 0xFF);
ilCodes[3] = (byte)(createdMethod1.MetadataToken >> 16 & 0xFF); …Run Code Online (Sandbox Code Playgroud) 我最近想开始学习汇编,但是我在构建我的项目时遇到了一些问题.
我想要的是一个C++和汇编项目,但它目前无法正常工作.下面显示的汇编代码构建得很好:
ExitProcess PROTO
.data
.code
main proc
mov rax, 8
mov rcx, 0
call ExitProcess
main endp
end
Run Code Online (Sandbox Code Playgroud)
但是当我向项目中添加一个cpp文件时,我得到一堆链接器错误:
void ToDo()
{
int i = 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
1>------ Build started: Project: AssemblyTest, Configuration: Debug x64 ------
1> test.cpp
1>MSVCRTD.lib(_init_.obj) : error LNK2019: unresolved external symbol _CrtDbgReport referenced in function _CRT_RTC_INIT
1>MSVCRTD.lib(_init_.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function _CRT_RTC_INITW
1>MSVCRTD.lib(_error_.obj) : error LNK2019: unresolved external symbol __stdio_common_vsprintf_s referenced in function _vsprintf_s_l
1>MSVCRTD.lib(_error_.obj) : error LNK2001: …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个内核,我无法将C输出与程序集链接起来.的ld.我收到错误:
无法识别的仿真模式:elf_i386
我正在使用Windows 10专业版与MinGW32和MSYS.我正在使用的代码:
link.ld
/*
* link.ld
*/
OUTPUT_FORMAT(elf32-i386)
ENTRY(start)
SECTIONS
{
. = 0x100000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}
Run Code Online (Sandbox Code Playgroud)
kernel.c
/*
* kernel.c
*/
void kmain(void)
{
const char *str = "my first kernel";
char *vidptr = (char*)0xb8000; //video mem begins here.
unsigned int i = 0;
unsigned int j = 0;
/* this loops clears the screen
* there are 25 lines …Run Code Online (Sandbox Code Playgroud) 一些小丑(BIOS/DOS/TSR ......)在中断向量表中写入了随机数据.我知道这是因为拆卸告诉了我.
通常在占用中断向量之前,我验证所选的IVT插槽是空的.但是,有了所有这些留下来的数据,一个不起眼的应用程序如何知道钩住特定的中断向量仍然是安全的?
虽然我的程序员参考描述了DOS功能25小时SetInterruptVector为
" 安全地修改中断向量以指向指定的中断处理程序"
我不认为这种预先存在的虚假内容太过关注.到目前为止安全!
是否有一些巧妙的方法可以绝对确定中断向量是免费的?