在WinDef.h的深处,有来自分段记忆时代的遗物:
#define far
#define near
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用near或far作为变量名称,这显然会导致问题.任何干净的解决方法?其他然后重命名我的变量?
我有一个包含这些文件的文件夹:
alongfilename1.txt <--- created first
alongfilename3.txt <--- created second
Run Code Online (Sandbox Code Playgroud)
当我在命令提示符下运行DIR/x时,我看到分配了这些短名称:
ALONGF~1.TXT alongfilename1.txt
ALONGF~2.TXT alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
现在,如果我添加另一个文件:
alongfilename1.txt
alongfilename2.txt <--- created third
alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
我看到了这个:
ALONGF~1.TXT alongfilename1.txt
ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
精细.它似乎是根据我创建文件的日期/时间分配"〜#".它是否正确?
现在,如果我删除"alongfilename1.txt",其他两个文件将保留其短名称.
ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
何时释放该ID(在本例中为~1)以用于另一个短名称.它会永远吗?
另外,我的机器上的文件是否有可能是X的短名称,而同一文件在另一台机器上有一个短名称Y?我特别关注其自定义操作使用DOS短名称的安装.
多谢你们.
我有一个DOS批处理脚本,它调用一个java应用程序,它通过控制台UI与用户交互.为了论证,让我们称之为它runapp.bat的内容
java com.example.myApp
Run Code Online (Sandbox Code Playgroud)
如果在控制台中调用批处理脚本,一切正常.但是,如果从窗口管理器调用脚本,则在应用程序完成执行后,新打开的控制台将立即关闭.我想要的是控制台在所有情况下都保持打开状态.
我知道以下技巧:
pause在脚本末尾添加命令.如果runapp.bat从命令行调用,这有点难看.
使用cmd /K java com.example.myApp这是我迄今为止找到的最佳解决方案,但是从命令行调用时会留下额外的shell环境,因此调用exit实际上并不关闭shell.
有没有更好的办法?
我正在寻找一个DOS脚本来删除根目录中的所有文件和子目录,除了根目录中的一组批处理文件(*.bat).任何DOS都会在那里知道一个简单的方法吗?
更新
谢谢大家的帮助.这就是我现在所处的位置(见下文).我正在使用Ken的建议来删除文件.我想知道我怎样才能制止这种脚本运行,如果del还是RD命令失败,由于在文件/目录的锁.谁知道怎么样?现在,这个脚本将在删除后执行一些操作,如果任何删除失败,我想停止脚本.
@echo off
REM *********************************************************************
REM * Delete all files and subdirs except for batch files in the root *
REM *********************************************************************
REM Delete all files in current dir except bat files. Does this by a) setting the attributes of *.bat files to
REM readonly and hidden, b) deleting the rest, c) reseting the attributes
attrib +r +s *.bat
del *.* /S /Q
attrib -r -s *.bat
REM Deletes ALL subdirectories
FOR /D %%G …Run Code Online (Sandbox Code Playgroud) start命令可以在批处理文件中启动像记事本这样的应用程序,如下所示:
start notepad
start "my love.mp3"
Run Code Online (Sandbox Code Playgroud)
但是如何从命令行关闭正在运行的应用程序?我发现taskkill在我的搜索中,但我不认为这是正确的命令,因为它不起作用 - 它说没有这样的文件.
如何关闭启动的应用程序start?
我在XP Pro SP3系统上创建的BAT文件每次都能完美运行.
安装在另一个XP [也是Pro SP3]系统上,每次都会失败("挂机").
问题结果是在多步管道中.为了隔离它,我一直在简化,直到我到达这个最小的[和人工]测试用例
echo. | date | find "/" | find "/" | find "/"Run Code Online (Sandbox Code Playgroud)
注意:前两个步骤没有缩短,date /t因为一些用户的系统是XP之前的[因此缺少Command Extensions].另外:仔细测试显示date正在执行MS-DOS内部DATE命令并find执行在"C:\ WINDOWS\system32 \"中找到的香草"FIND.EXE,2004年8月4日,9216"[和"中的安全副本相同" C:\ I386 \".
在失败的系统上,每个具有4个或更多个| s的命令在第五步中挂起,即使在这里 - 这里 - 程序很简单,它们处理的文本量也很小.
昨天我在用户的系统上做了一些进一步的测试,发现了一个我不知道的微妙之处.我在命令提示符下输入了简化命令[上面].按预期失败["挂起"].但是,当我重新启动并在做任何事情之前再次尝试[在用户的正常操作中永远不会发生的情况]时,我感到震惊:它工作[即,MS-DOS DATE命令的输出按预期显示].它再次起作用.然后在第三次尝试时,故障模式重新出现,之后保持一致.
我确认这files=40对两个系统都有效,并放弃了.我仍然很好奇,但我不能花很多时间在一个小型项目上为一个无偿客户端分析我可以轻松解决的问题.
感谢大家,感谢您快速有效的回复.
在原始系统上,无论调用哪些程序以及它们正在处理多少文本[原因],具有4个或更多个| s的命令都能正常工作.
一旦确定了限制,就会有许多琐碎的解决方法,所以我的问题只是好奇心:有人可以提出限制的来源以及是否有[在XP中]会提高/消除它的设置?
注意:两个系统上都不存在HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun和HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun.
另外:我为通过反复编辑我的原始帖子来回答评论而道歉,但无论我使用哪个浏览器登录,"添加评论"弹出窗口[或其应该是什么]都不会出现.也许我的理解是在我自己的帖子中添加评论不需要声望点是错误的.但是,现在我看到"show#more comments"也没有用.
最后:我使用这个网站的问题[主要症状是javascript控制台消息"Uncaught ReferenceError:StackExchange未定义"]与此处讨论的相同https://meta.stackexchange.com/questions/117730/stack-overflow-onclick-actions-broken- about一年前.
两个命令都创建文件夹 我读到 MKDIR可以创建甚至子文件夹.
对于我的汇编语言类,我们使用DPMI编写DOS程序.不幸的是,我无法一直访问32位Windows机器.我确实在我使用的每台计算机上安装了一个Debian虚拟机.
我安装了DOSBox和DOSEMU.有什么办法可以在Linux而不是DOS中汇编和编译程序吗?我正在使用nasm,所以我似乎没有任何问题得到它汇编DOS格式.但是,我无法通过编译器使用我的C代码运行它并获得DOS可执行文件(使用gcc或MinGW).
有没有办法做到这一点,或者我几乎要在DOS下安装所有工具?
我们在Windows上有一个文件夹......很大.我跑了"dir> list.txt".该命令在1.5小时后丢失了响应.输出文件大约为200 MB.它显示至少有280万个文件.我知道情况很愚蠢,但让我们关注问题本身.如果我有这样的文件夹,我该如何将其拆分为一些"可管理"的子文件夹?令人惊讶的是,我提出的所有解决方案都涉及到在某个时刻获取文件夹中的所有文件,这在我的案例中是禁止的.有什么建议?
感谢Keith Hill和Mehrdad.我接受了Keith的回答,因为这正是我想做的事情,但我无法让PS快速完成.
有了Mehrdad的提示,我写了这个小程序.移动280万个文件需要7个多小时.所以最初的dir命令完成了.但不知怎的,它没有回到控制台.
namespace SplitHugeFolder
{
class Program
{
static void Main(string[] args)
{
var destination = args[1];
if (!Directory.Exists(destination))
Directory.CreateDirectory(destination);
var di = new DirectoryInfo(args[0]);
var batchCount = int.Parse(args[2]);
int currentBatch = 0;
string targetFolder = GetNewSubfolder(destination);
foreach (var fileInfo in di.EnumerateFiles())
{
if (currentBatch == batchCount)
{
Console.WriteLine("New Batch...");
currentBatch = 0;
targetFolder = GetNewSubfolder(destination);
}
var source = fileInfo.FullName;
var target = Path.Combine(targetFolder, fileInfo.Name);
File.Move(source, target);
currentBatch++;
}
}
private static string GetNewSubfolder(string parent) …Run Code Online (Sandbox Code Playgroud) dos ×10
batch-file ×5
windows ×4
c ×2
command-line ×2
assembly ×1
c++ ×1
cmd ×1
csv ×1
debian ×1
file ×1
filesystems ×1
kill-process ×1
mkdir ×1
nasm ×1
powershell ×1
scripting ×1
taskkill ×1
winapi ×1
windows-xp ×1