有人可以给我一个例子,说明批处理脚本在有或没有延迟扩展的情况下会有不同的行为吗?您是否有任何不希望使用延迟扩展的情况?谢谢.
我试图在表格中指定文本的字体和大小.它似乎尊重FACE =但忽略了SIZE =.例如,我有如下所示的HTML.它正确显示Courier New中的文本,但两个表都显示相同的字体大小.我有什么问题吗?
<font face="Courier New" size="12"><table width="100%"><tr><td><b>Client</b></td><td><b>InstanceName</b></td><td><b>dbname</b></td><td><b>Filename</b></td><td><b>KeyName</b></td><td><b>Rotation</b></td><td><b>Path</b></td></tr>
<tr><td>NEWDEV6</td><td>EXPRESS2012</td><td>master</td><td>master.mdf</td><td>test_key_16</td><td>0</td><td>d:\Program Files\Microsoft SQL Server\MSSQL11.EXPRESS2012\MSSQL\DATA\master.mdf</td></tr>
</table></font>
<font face="Courier New" size="24"><table width="100%"><tr><td><b>Client</b></td><td><b>InstanceName</b></td><td><b>dbname</b></td><td><b>Filename</b></td><td><b>KeyName</b></td><td><b>Rotation</b></td><td><b>Path</b></td></tr>
<tr><td>NEWDEV6</td><td>EXPRESS2012</td><td>master</td><td>master.mdf</td><td>test_key_16</td><td>0</td><td>d:\Program Files\Microsoft SQL Server\MSSQL11.EXPRESS2012\MSSQL\DATA\master.mdf</td></tr>
</table></font>
Run Code Online (Sandbox Code Playgroud) 我知道这是一个古怪的问题,但在Visual Studio 2010 C#.Net中有一种方法可以命名一个扩展名与DLL不同的程序集.例如,MyAssembly.MLL而不是MyAssembly.DLL.
我四处寻找,却无法找到办法.
有没有办法使用TSQL,CMD脚本或VB脚本来告诉:
1)如果SQL Server集群在服务器上,并且
2)如果它是活动节点?
谢谢.
我已经将更复杂的 CMD 脚本缩减为基本要素。它逐行读取输入文件,取消引用(如果引用)并将其写出到另一个 CMD 文件。
问题是,如果输入文件包含感叹号(! 或 bang),则字符会在行的某处被删除。
这是 CMD 脚本,BANG1.CMD:
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
if exist bang2.cmd del bang2.cmd
for /f "tokens=*" %%a in (bang1.txt) do call :doit1 %%a
exit /b
:doit1
set P1=%1
if %P1%. EQU . exit /b
call :unquotex P1 %P1%
echo>>bang2.cmd echo P1:[%P1%]
exit /b
:unquotex
set X=%2
set Q=%X:~0,1%
if "!Q!" EQU ^""" SET X=!X:~1,-1!
set %1=%X%
exit /b
Run Code Online (Sandbox Code Playgroud)
这是输入文件 BANG1.TXT:
HelloWorld
"Hello World"
Hello!World
"Hello!World"
Run Code Online (Sandbox Code Playgroud)
生成的文件 BANG2.CMD 最终包含以下内容:
echo P1:[HelloWorld]
echo P1:[Hello …Run Code Online (Sandbox Code Playgroud) 我试图将REG值读入BAT文件中的环境变量.例如,
REG HKLM\SYSTEM\CurrentControlSet\Services\Eventlog/v ImagePath
我可以将REG命令的整个输出字符串输入到这样的环境变量中:
FOR /F "usebackq delims==" %%a in (`REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath`) DO set ImagePath=%%a
Run Code Online (Sandbox Code Playgroud)
但是,这会将环境变量设置为整行,即
ImagePath REG_EXPAND_SZ C:\Windows\system32\services.exe
Run Code Online (Sandbox Code Playgroud)
我希望环境变量只包含路径部分,即
C:\Windows\system32\services.exe
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何提示.
我知道如何在批处理脚本中进行文字字符串替换.但是,我有一个特定的情况,我需要替换数值变量的值
这是脚本:
setlocal enableextensions enabledelayedexpansion
set /A L=2
:L1
if %L% EQU 0 goto :EOF
set STRING="THIS IS # TEST"
SET NEW=%STRING:#=%%L%
echo %NEW%
set /A L=%L% - 1
goto L1
Run Code Online (Sandbox Code Playgroud)
我希望它显示这个:
THIS IS 2 TEST
THIS IS 1 TEST
Run Code Online (Sandbox Code Playgroud)
但它最终将这种方式改为:
THIS IS TEST2
THIS IS TEST1
Run Code Online (Sandbox Code Playgroud)
关于如何让它做我需要的任何提示?
谢谢.
我正在尝试将 Ascii 字符串复制到字节数组,但无法复制。如何?
这是我迄今为止尝试过的两件事。没有一个有效:
public int GetString (ref byte[] buffer, int buflen)
{
string mystring = "hello world";
// I have tried this:
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
buffer = encoding.GetBytes(mystring);
// and tried this:
System.Buffer.BlockCopy(mystring.ToCharArray(), 0, buffer, 0, buflen);
return (buflen);
}
Run Code Online (Sandbox Code Playgroud) 我试图在Windows控制台应用程序(C/C++)中获取父进程的名称(完整路径).它看起来应该有效,但它失败了,我看不出我做错了什么.它成功获取父PID,但未获取名称.任何更正将不胜感激.
#include <Windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <Psapi.h>
DWORD getParentPID(DWORD pid)
{
HANDLE h = NULL;
PROCESSENTRY32 pe = { 0 };
DWORD ppid = 0;
pe.dwSize = sizeof(PROCESSENTRY32);
h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if( Process32First(h, &pe))
{
do
{
if (pe.th32ProcessID == pid)
{
ppid = pe.th32ParentProcessID;
break;
}
} while( Process32Next(h, &pe));
}
CloseHandle(h);
return (ppid);
}
int getProcessName(DWORD pid, PUCHAR fname, DWORD sz)
{
HANDLE h = NULL;
int e = 0;
h = OpenProcess
(
PROCESS_QUERY_INFORMATION, …Run Code Online (Sandbox Code Playgroud) 我花了几个小时试图找出这个特殊的联接.我有这三个SQL Server表(假设所有必需的索引和外键):
create table [mykey] (keyname varchar(32) not null);
go
create table [myinstance] (
instancename varchar(48) not null);
go
create table [mypermissions] (
keyname varchar(32),
instancename varchar(48),
permission int not null);
go
insert into [mykey] (keyname) values ('test_key_1'), ('test_key_2'), ('test_key_3');
GO
insert into [myinstance] (instancename) values ('sqlexpress'), ('std2008'), ('ent2012');
GO
insert into mypermissions (keyname, instancename, permission) values
('test_key_1', 'sqlexpress', 1),
('test_key_1', 'std2008', 0),
('test_key_2', 'ent2012', 1),
('test_key_2', 'sqlexpress', 0)
GO
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个联接,显示键名的所有权限,同时还显示缺少特定权限的位置.我希望输出看起来像这样(命令不重要):
keyname instancename permission
---------- ------------ ----------
test_key_1 sqlexpress 1 …Run Code Online (Sandbox Code Playgroud) 我在C#.Net程序中遇到以下异常:
System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的第一次机会异常在myapp.exe中的0x000007feff75121b处发生第一次机会异常:0xC0000005:访问冲突读取位置0x0000000000000000.CustomMarshalers.dll中出现"System.AccessViolationException"类型的第一次机会异常CustomMarshalers.dll中发生未处理的"System.AccessViolationException"类型异常附加信息:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
我在try/catch(Exception)块中获取它,但它永远不会被捕获.
我正在尝试调试它,看看它为什么会发生,但如果不抓住它就很难做到.
是否可以在C#.Net中捕获0xC0000005异常?(Windows 2008 R2上的Framework 4.0).
谢谢你的任何提示.
我在 C# DotNet 中使用 X509Store 来遍历证书存储。但是,我不清楚证书位置和证书存储之间有什么区别。例如,位置是 LocalUser 和 LocalMachine。商店的例子是 My (Personal) 和 Root。LocalMachine 上的 Personal 存储与 LocalUser 上的 Personal 存储有什么区别?在 LocalMachine 上拥有个人商店意味着什么?
有没有办法在CMD脚本中检索和显示Windows错误消息的文本?
例如,假设MYAPP.EXE返回2(ERROR_FILE_NOT_FOUND)。与此相关的Windows错误消息是: “系统找不到指定的文件”
我可以在CMD脚本中检索并显示它吗?例如,
REM mycmd.cmd
MYAPP.EXE
ECHO %ERRORMESSAGE%
Run Code Online (Sandbox Code Playgroud)
谢谢。