Таблицы SQL представляют неупорядоченных множеств. SQL-запросы возвращают неупорядоченных наборов. , , с одним исключением: если самый внешний select
имеет соответствующий order by
.
Итак, order by
в подзапросе не имеет никакого эффекта. Некоторые базы данных даже не допускают order by
в этом случае. В других случаях может выглядеть , как будто результаты упорядочены, но изменения в данных или среде могут изменить это.
В вашем случае подзапрос не нужен. Вы, вероятно, знаете это, но вам следует написать:
SELECT p.*
FROM people p
WHERE p.people_Age BETWEEN 20 AND 25
ORDER BY p.age DESC
Я обнаружил, что лучшее решение - использовать vbscript вместе с пакетным файлом.
Вот командный файл:
@ECHO OFF
FOR /F "usebackq delims=" %%i in (`cscript findDesktop.vbs`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
Вот файл findDesktop.vbs:
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
wscript.echo(strDesktop)
Могут быть и другие решения, но лично я считаю этот менее хакерским.
Я тестировал это на английском и французском ПК - похоже, работает (Windows XP).
HTH,
Юлиан Чербэною
Довольно старая тема. Но я хочу дать свои 2 цента...
я немного изменил tomasz86 решение, для взгляда в старом стиле "Папок Shell" вместо "Пользователя Папки Shell", таким образом, я не должен разворачивать envvar %userprofile %
Также от powershell/vbscript/etc нет никакой зависимости....
for /f "usebackq tokens=2,3*" %%A in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"`) do if %%A==REG_SZ set desktopdir=%%B
echo %desktopdir%
Hope это помогает.
Для безопасности следует использовать соответствующие API в Powershell (или VBScript)
.
Используя PowerShell:
[Environment]::GetFolderPath("Desktop")
Скопируйте что-нибудь, используя Powershell:
Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop"))
Вот пример VBScript, чтобы получить путь к рабочему столу:
dim WSHShell, desktop, pathstring, objFSO
set objFSO=CreateObject("Scripting.FileSystemObject")
Set WSHshell = CreateObject("WScript.Shell")
desktop = WSHShell.SpecialFolders("Desktop")
pathstring = objFSO.GetAbsolutePathName(desktop)
WScript.Echo pathstring
@ Ответ Дейва Вебба, вероятно, будет правильным. Единственное, о чем я могу думать, это CSIDLs:
CSIDL_DESKTOPDIRECTORY
Каталог файловой системы, использовавшийся для физически хранить файловые объекты на настольный компьютер (который не следует путать с самой папкой рабочего стола). A Типичный путь - C:\Documents и Settings\username\Desktop.
Понятия не имею, как до них добраться из командной строки.
Это не решение, но я надеюсь, что оно поможет: Это близко, за исключением того, что при KEY = %userprofile%\desktop копия выходит из строя, несмотря на то, что zdesktop=%userprofile%\desktop. Я думаю, потому что встроенный %userprofile% не переводится.
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop>z.out
for /f "tokens=3 skip=4" %%t in (z.out) do set zdesktop=%%t
copy myicon %zdesktop%
set zdesktop=
del z.out
Поэтому он успешно разбирает ключ REG, но если ключ содержит встроенный %var%, он не переводится во время команды копирования
.вы также можете открыть командную строку DOS и выполнить команду set.
Это даст вам представление о том, какие переменные окружения доступны в вашей системе.
например. - т.к. вы, где конкретно спрашиваете о неанглийском Windows - heres - это пример моей собственной немецкой версии (Window7-64bit) :
set > env.txt type env.txt ALLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\SOF\AppData\Roaming CommonProgramFiles=C:\Program Files\Common Files CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files CommonProgramW6432=C:\Program Files\Common Files COMPUTERNAME=VMSOF ComSpec=C:\Windows\system32\cmd.exe FP_NO_HOST_CHECK=NO HOMEDRIVE=C: HOMEPATH=\Users\SOF LOCALAPPDATA=C:\Users\SOF\AppData\Local LOGONSERVER=\\VMSOF NUMBER_OF_PROCESSORS=2 OS=Windows_NT Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\CMake 2.8\bin;C:\Program Files (x86)\emacs-22.3\bin;C:\Program Files (x86)\GnuWin32\bin; PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC PROCESSOR_ARCHITECTURE=AMD64 PROCESSOR_IDENTIFIER=AMD64 Family 15 Model 67 Stepping 3, AuthenticAMD PROCESSOR_LEVEL=15 PROCESSOR_REVISION=4303 ProgramData=C:\ProgramData ProgramFiles=C:\Program Files ProgramFiles(x86)=C:\Program Files (x86) ProgramW6432=C:\Program Files PROMPT=$P$G PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ PUBLIC=C:\Users\Public SESSIONNAME=Console SystemDrive=C: SystemRoot=C:\Windows TEMP=C:\Users\SOF\AppData\Local\Temp TMP=C:\Users\SOF\AppData\Local\Temp USERDOMAIN=VMSOF USERNAME=SOF USERPROFILE=C:\Users\SOF VBOX_INSTALL_PATH=C:\Program Files\Sun\VirtualBox\ VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\ windir=C:\Windows
Это не только не сработало бы для международной версии Windows, но и не сработало бы, если бы пользователь отредактировал реестр, чтобы его папка Desktop располагалась где-то в другом месте. Вы можете запросить в реестре расположение файла, используя команду REG
:
REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
Чтобы получить эту переменную, используйте нечто подобное:
FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ECHO %DESKTOPDIR%
Ответ КБ на использование [Environment] :: GetFolderPath ("Desktop")
, очевидно, является официальным Windows API для этого.
Однако, если вы работаете в интерактивном режиме в командной строке или просто хотите, чтобы что-то работало на вашем компьютере, символ тильды (~) относится к дому текущего пользователя. папка. Итак, ~ / desktop
- это папка на рабочем столе пользователя.