找回密码
 加入
搜索
查看: 10544|回复: 19

[AU3基础] [已解决]怎样在“当前目录”新建文件夹?

 火.. [复制链接]
发表于 2012-8-31 13:57:12 | 显示全部楼层 |阅读模式
本帖最后由 虎虎虎 于 2012-9-2 14:11 编辑

我通过@WorkingDir,来新建,还是在当前目录。
我的目的是:不管在那个位置,只要通过快捷键就能新建。

#region ;**** 参数创建于 ACNWrapper_GUI ****
 #AutoIt3Wrapper_icon=C:\Windows\system32\SHELL32.dll|-20
 #AutoIt3Wrapper_Outfile=new.exe
 #endregion ;**** 参数创建于 ACNWrapper_GUI ****
 
 #include "_FileAndDirCreate.au3"
 
 HotKeySet("!d", "_NewDir")
 
 While 1
         Sleep(100)
 WEnd
 
 Func _NewDir()
         
         Local $DATE
 
         $DATE = '\' & @YEAR & ' - ' & @MON & ' - ' & @MDAY 
         ;& '-' & @HOUR & '-' & @MIN & '-' & @SEC & '\'
         
         _FileAndDirCreate(@WorkingDir & $DATE)
         
 EndFunc   ;==>_NewDir
 



这是我在网上搜的批处理的代码:
@echo off
 cd/d %~dp1
 set y=%date:~0,4%
 set m=%date:~5,2%
 set d=%date:~8,2%
 mkdir "%y%-%m%-%d%" 
 
 
发表于 2012-8-31 14:00:20 | 显示全部楼层
_FileAndDirCreate.au3呢?
 楼主| 发表于 2012-8-31 14:07:37 | 显示全部楼层
本帖最后由 虎虎虎 于 2012-8-31 14:09 编辑

回复 2# menfan1


在这里:
http://www.autoitx.com/forum.php ... light=%2Blixiaolong
发表于 2012-8-31 14:36:41 | 显示全部楼层
函数参考
DirCreate
--------------------------------------------------------------------------------
新建一个目录/文件夹.

DirCreate ( "路径" )

参数

路径 要创建的目录路径.  



返回值

成功: 返回值为1.
失败: 返回值为0,说明在创建目录的过程中遇到错误.  

注意/说明

在要创建的目录的父目录(上一级目录)不存在时,这些父目录也会被创建.
发表于 2012-8-31 15:19:43 | 显示全部楼层
本帖最后由 xiehuahere 于 2012-8-31 15:27 编辑

我在想,那个DOS版的cmdhere是怎么实现的。
  
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/folder/shell/cmd]
@="CMD here"
[HKEY_CLASSES_ROOT/folder/shell/cmd/command]
@="cmd.exe /k cd /d \"%1\""

通过右键菜单打开DOS窗口,DOS中显示的路径就直接是当前路径。
这里通过%1来获取第一个参数,如果能搞清楚这个参数是从哪里来的,问题就能解决了
发表于 2012-8-31 15:30:04 | 显示全部楼层
没搞懂   楼主  的意思   当前目录   指的是  脚本所在目录吗?
还是   用户正在  打开的目录?
 楼主| 发表于 2012-8-31 15:32:58 | 显示全部楼层
回复 6# 魔导

这个“当前目录”是指你说的后者。。
发表于 2012-8-31 15:57:22 | 显示全部楼层
回复  魔导

这个“当前目录”是指你说的后者。。
虎虎虎 发表于 2012-8-31 15:32



    实现:在当前激活的文件夹中创建文件夹
   代码:
HotKeySet("^e","a")
While 1 
        Sleep(250)
WEnd 
Func a()
$var = WinList()
For $i = 1 to $var[0][0]
  If 15 = WinGetState($var[$i][0]) Then
           DirCreate($var[$i][0]&'\写您要的文件名')
  EndIf
Next
EndFunc 

ps:BUG 未知   小弟自己没做过这方面的   希望可以帮助楼主
发表于 2012-8-31 16:32:35 | 显示全部楼层
回复 8# 魔导

$var[$i][0] 是窗体标题,只有文件夹选项中设置了“在窗口标题显示全路径”才行。
否则就只是文件夹名称。
发表于 2012-8-31 16:49:15 | 显示全部楼层
回复  魔导

$var[$i][0] 是窗体标题,只有文件夹选项中设置了“在窗口标题显示全路径”才行。
否则就只 ...
xiehuahere 发表于 2012-8-31 16:32



嗯,    确实是这样   刚好小弟的就是完整路径   代码得以实现
     还请前辈指教指教  
发表于 2012-8-31 16:59:54 | 显示全部楼层
回复 8# 魔导

非常有创意的代码,学习了~~
很巧妙地将"标题"-->"路径"的问题解决了~~
发表于 2012-8-31 17:20:44 | 显示全部楼层
本帖最后由 xiehuahere 于 2012-8-31 17:25 编辑

回复 1# 虎虎虎

一个看上去很无奈的方法,拷贝脚本自身到当前目录然后执行(不知道路径所以通过ctrl+v粘贴后回车执行,汗~!),再通过@ScriptDir获取当前路径。
很丑陋。仅供拓展一下思路:

#include <Misc.au3>

Local $RegKey = "HKEY_CURRENT_USER\Test", $RegFlag= "MyFlag", $RegPath = "CurrDIR"

If RegRead($RegKey, $RegFlag) == "" Then
        RegWrite($RegKey, $RegFlag, "REG_DWORD", 1)
        OnAutoItExitRegister("_Clean")
        $sArray = StringSplit(@AutoItExe, '\')
        $scriptName = $sArray[$sArray[0]]
        HotKeySet("!d", "_NewDir")
        HotKeySet("{ESC}", "_Exit")
Else
        RegWrite($RegKey, $RegPath, "REG_SZ", @ScriptDir)
        Exit
EndIf

While 1
        Sleep(100)
        $val = RegRead($RegKey, $RegPath)
        If $val <> "" Then ;已获得当前路径
                      RegDelete($RegKey, $RegPath)
                $DATE = '\' & @YEAR & ' - ' & @MON & ' - ' & @MDAY 
                DirCreate($val & '\' & $DATE)
                FileDelete($val & '\' & $scriptName)
        EndIf
WEnd

Func _NewDir()
        Local $size = FileGetSize(@AutoItExe)
        _ClipPutFile(@AutoItExe)
        Sleep(1000)
        WinActivate("[ACTIVE]")
        Send("^v")
        Sleep(2000) ;要等待脚本可执行文件拷贝完毕
        Send("{ENTER}")
EndFunc

Func _Clean()
        RegDelete($RegKey)
EndFunc

Func _Exit()
        Exit
EndFunc
发表于 2012-8-31 18:41:18 | 显示全部楼层
这个不需要保持运行状态,直接发送到桌面快捷方式,设置快捷键。
以下脚本用Send即可简单实现,更多判断自行处理(比如是否有选择文件,如有则先取消选中)。
If WinActive('[CLASS:CabinetWClass]') Or WinActive('[CLASS:Progman]') Then
        Sleep(200)
        Send('{APPSKEY}')
        Send('w{ENTER}')
EndIf

评分

参与人数 1金钱 +30 收起 理由
魔导 + 30 膜拜~A大永远都那么热心

查看全部评分

 楼主| 发表于 2012-8-31 20:54:24 | 显示全部楼层
能否不用获取窗口的方式,有些局限,如果是【桌面】就不能认了,望高手提供思路。
发表于 2012-9-1 08:06:42 | 显示全部楼层
不会 帮顶。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-28 09:10 , Processed in 0.084437 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表