一段时间以来一切都很好,但后来我开始想知道如果我可以通过一些快捷方式访问今天文件夹,那就太方便了,比如 C:\ today < / em>或类似的东西。在兔子洞下面我们去......
所以我修改了我的脚本来创建一个NTFS符号链接(是的,这样的东西存在!)从C:\today
到例如C:\Users\<me>\Documents\dayfolders\2017-12-01\
现在,当我离开工作岗位时,我并没有仔细地关闭我碰巧使用的每个程序中的每个文件(所以第二天早上我可以从我离开的地方拿起)。这会影响我的花式符号,因为当某些内容仍在使用它时我无法删除符号链接。所以,我想,我将重命名符号链接到临时目录中的临时内容,然后使用旧名称创建一个新的符号链接。 此策略仅适用于第一次(或两次)。到目前为止,我只是和它一起生活过,但我仍然觉得 MAY 可以成为一条出路!
如果有人可以帮助我,请做! :)
所以,我计划任务的代码(Python 3):
if __name__ == '__main__':
# some setup tasks here for logging, loading conf etc
basepath = getbasepath(conf)
cleanupolddirs(basepath)
newdir = createnewdir(basepath)
relink(conf, newdir)
# post-run cleanup tasks here
从上到下,其余的相关功能:
def getbasepath(config):
basepath_ = config['General']['BasePath']
if (len(basepath_) == 0) or (not os.path.exists(basepath_)):
basepathmsg = "Error with base path. Provided path was: %s" % str(basepath_)
logging.fatal(basepathmsg)
logging.shutdown()
sys.exit(basepathmsg)
return basepath_
删除空目录:
def cleanupolddirs(base):
for d in os.listdir(base):
try:
wd = os.path.join(base, d)
mode = os.stat(wd).st_mode
if stat.S_ISDIR(mode) and not stat.S_ISLNK(mode):
subs = os.listdir(wd)
if len(subs) == 0:
logging.debug('empty dir')
os.rmdir(wd)
except Exception as e:
logging.error("FNFE:" + str(e))
现在我们开始了实际的业务。首先,为链接创建一个目标目录,指向:
def createnewdir(base):
freshdir = os.path.join(base, str(date.today()))
if not os.path.exists(freshdir):
try:
os.mkdir(freshdir)
except Exception as e:
logging.error("New daydir error:" + str(freshdir) + "; " + str(e))
return freshdir
现在是麻烦的部分 - 将当前链接重命名为temp中的某些内容并创建一个新链接:
def relink(config, target):
links = config.items('LinkPaths')
tempdir = tempfile.mkdtemp()
# create a link to new daydir
for linkname, linkpath in links:
if os.path.exists(linkpath):
temppath = os.path.join(tempdir, os.path.basename(linkname) + str(date.today()))
logging.info('temp path for {link} is {path}'.format(link=linkpath, path=temppath))
try:
os.rename(linkpath, temppath)
except OSError as e:
logging.error('Error renaming link ({link}): {err}'.format(link=linkpath, err=e))
try:
os.unlink(temppath)
except OSError as e:
logging.error('Error deleting temp link ({link}): {err}'.format(link=temppath, err=e))
try:
os.symlink(target, linkpath)
except OSError as err:
logging.error("Error creating/updating link ({link}): {err}".format(link=linkpath, err=err))
try:
shutil.rmtree(tempdir)
except Exception as err:
logging.error("Error removing temporary directory ({dir}): {err}".format(dir=tempdir, err=err))
和说明结果的尝试的日志文件。我从一个&#34; clean&#34;开始符号链接不存在的状态。从日志消息中可以看出,我实际上试图保留两个链接 - 一个直接位于C:\下,另一个位于我的个人资料目录中。
2017-12-01 01:00:01,528 - INFO - temp path for C:\today is C:\Users\<me>\AppData\Local\Temp\tmpltsvanzn\path12017-12-01
2017-12-01 01:00:01,573 - INFO - temp path for C:\Users\<me>\Documents\dayfolders\today is C:\Users\<me>\AppData\Local\Temp\tmpltsvanzn\path22017-12-01
2017-12-02 01:00:01,460 - INFO - temp path for C:\today is C:\Users\<me>\AppData\Local\Temp\tmpom8kry8p\path12017-12-02
2017-12-02 01:00:01,485 - INFO - temp path for C:\Users\<me>\Documents\dayfolders\today is C:\Users\<me>\AppData\Local\Temp\tmpom8kry8p\path22017-12-02
2017-12-03 01:00:01,454 - ERROR - FNFE:[WinError 5] Access is denied: 'C:\\Users\\<me>\\Documents\\dayfolders\\today'
2017-12-03 01:00:01,484 - ERROR - Error creating/updating link (C:\today): [WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\<me>\\Documents\\dayfolders\\2017-12-03' -> 'C:\\today'
2017-12-03 01:00:01,484 - ERROR - Error creating/updating link (C:\Users\<me>\Documents\dayfolders\today): [WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\<me>\\Documents\\dayfolders\\2017-12-03' -> 'C:\\Users\\<me>\\Documents\\dayfolders\\today'
并且在接下来的每一天都会记录与12月3日相同的错误。
任务以我的用户身份运行,并且&#34;以最高权限运行&#34;复选框已选中。该任务也设置为&#34;运行用户是否登录&#34;。
我觉得有一些非常基本的干扰我征服世界的计划,但对于我的生活,我看不到木头的树木。