Project1

标题: 怎么用脚本创建一个指定名称的文件夹? [打印本页]

作者: px.凤翔九天    时间: 2010-11-18 23:09
标题: 怎么用脚本创建一个指定名称的文件夹?
本帖最后由 px.凤翔九天 于 2010-11-19 23:13 编辑

需求就是创建一个文件夹,文件夹名用变量的值(字符串),这个要怎么写?不是要用dll吧?dll鄙人不会...请高手指点。
作者: DeathKing    时间: 2010-11-18 23:30
本帖最后由 DeathKing 于 2010-11-20 07:55 编辑

  1. dirname = "test"
  2. system("md #{dirname}")
复制代码
Kernel#system方法可以执行一个Shell命令(Windows中就是批处理),同意词为``(ESC键下方,重音符号,不过这个将在执行完毕后退出)

进阶

  1. dirname = "test"
  2. system("cd Graphics & md #{dirname}")
复制代码

作者: 禾西    时间: 2010-11-19 04:18
本帖最后由 禾西 于 2010-11-19 04:24 编辑

呃,Dir不就行了嗎?
        如果需要在 RM 目錄下建立新的文檔,就需要調用這樣的語句
       Dir.mkdir('./new_document')

作者: 苏小脉    时间: 2010-11-19 07:38
推荐用禾西同志的方法。生成子 Shell 其实就是 fork 一个子进程,有额外的开销。禾西的方法底层调用的是系统 API:
  1. static int
  2. wmkdir(const WCHAR *wpath, int mode)
  3. {
  4.     int ret = -1;

  5.     RUBY_CRITICAL(do {
  6.         if (CreateDirectoryW(wpath, NULL) == FALSE) {
  7.             errno = map_errno(GetLastError());
  8.             break;
  9.         }
  10.         if (_wchmod(wpath, mode) == -1) {
  11.             RemoveDirectoryW(wpath);
  12.             break;
  13.         }
  14.         ret = 0;
  15.     } while (0));
  16.     return ret;
  17. }
复制代码
当然在其上也包装了不少抽象层。如果要追求绝对效率,可以直接用 Win32API 调用 CreateDirectory。
作者: 无尘剑    时间: 2010-11-19 22:00
回复 苏小脉 的帖子

这……怎么会有C语言的东西?!
作者: px.凤翔九天    时间: 2010-11-19 22:13
本帖最后由 px.凤翔九天 于 2010-11-19 22:57 编辑

认真来讲,沙发的答案是我需要的,板凳的直接用Dir可以创建,但是不可套用变量 (#{}) 沙发的可以做到,只是沙发的原理不懂,好用倒是真的。鉴于沙发,板凳的答案完整,决定认可沙发,板凳楼。4楼的....什么东西啊...怎么看也不想Ruby啊...没试....
作者: 苏小脉    时间: 2010-11-20 04:30
回复 px.凤翔九天 的帖子

不知你是基于什么逻辑而得出"不可套用变量"这个结论的?

  1. Dir.mkdir("#{var}")
复制代码

作者: DeathKing    时间: 2010-11-20 07:58
当然不是Linux的Shell,Windows使用的是Bat

cd 是切换文件夹的命令
md 是建立文件夹的命令

在Linux下,cd是切换文件夹的命令,而mkdir才是建立文件夹的命令。

4#给的是Ruby的C源码中,Dir类的mkdir方法的定义。
作者: px.凤翔九天    时间: 2010-11-20 21:21
回复 DeathKing 的帖子

哦,谢谢解释,这下懂了。:)
作者: 苏小脉    时间: 2010-11-22 00:11
本帖最后由 苏小脉 于 2010-11-22 00:12 编辑

回复 DeathKing 的帖子

术语不同,概念相似,Windows 下,用那些命令会去调用 Windows 的命令行解释器 cmd.exe (Windows XP 后)或 COMMAND.COM(Windows XP 前),也就会生成子进程,或是替换当前进程,效率自然不如直接通过 API 了。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1