代码之家  ›  专栏  ›  技术社区  ›  Tom

使用批处理文件将文件复制到photoshop目录

  •  3
  • Tom  · 技术社区  · 15 年前

    我试图修改一个批处理脚本,将一个简单的脚本文件安装到用户photoshop目录中。

    安装程序的基本过程是将大部分产品文件复制到%APPDATA%文件夹中,然后此批处理脚本运行安装后将一个小钩子脚本复制到photoshop\presets\scripts中。但是,我们遇到了一些问题,一些客户的计算机上没有定义%APPDATA%,检查它是否存在然后设置它是一种不好的做法吗?如果不存在,您如何最好地设置它以适应不同版本的Windows?

    这是我当前的工作版本,有一些vista权限

        @echo off
    rem | locate photoshop by querying the registry
    echo Locating your photoshop installation..
    set regpath="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Photoshop.exe"
    set regval="Path"
    set photoshop_path=
    
    rem | accumlate the path from the query
    for /f "tokens=2,* delims= " %%A in ('reg query %regpath% /v %regval%') do ( 
        set photoshop_path=%%B 
    )
    
    rem | get rid of the last hanging space
    set photoshop_path=%photoshop_path:~0,-1%
    
    echo found photoshop at %photoshop_path%
    
    set script_path=%photoshop_path%Presets\Scripts\script.jsx
    
    echo Removing existing copies of script.jsx..
    if exist "%script_path%" del "%script_path%"
    echo ...Done!
    
    echo Installing script.jsx to Photoshop Scripts directory... %script_path%
    if exist "%photoshop_path%Photoshop.exe copy "%APPDATA%\My Company\etc\script.jsx" "%script_path%"
    echo Done!
    
    rem | some fix for vista permissions
    ver | find "XP" > nul
    if %ERRORLEVEL% neq 0 goto exit
    
    echo Setting permissions for Vista...
    echo ...Taking ownership of files...
    takeown /f "%APPDATA%\My Company" /r /d y
    echo ...Granting write access to files...
    icacls "%APPDATA%\My Company" /grant Users:F /t
    echo Done!
    
    :exit
    
    echo Creating Product Library entry in folderlist.cfg
    echo Product Library=%APPDATA%\My Company\library>>"%APPDATA%\My Company\etc\folderlist.cfg"
    echo Done!
    

    但是,当密钥不存在时会出现问题,当前部署的解决方案只是蛮力尝试安装photoshop的每个已知位置(基于%PROGRAMFILES%/%PROGRAMFILES(x86)%变量)。任何对更健壮和一致的脚本的帮助,以及关于以跨平台方式(主要是Mac/Windows)部署此类脚本时,哪些安装程序产品可能最有效的建议,都是非常值得赞赏的。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Tom    14 年前

    好吧,我基本上解决了这个问题,写了一个全新的安装程序使用Inno安装。它摇摇晃晃的。它使用pascal,这让我觉得有点过时,但它比批处理脚本更容易掌握和使用。有人请写一个python安装程序api!

    就查找用户安装的photoshop(或任何程序)的最佳实践而言,简单地尝试每个可能的键/目录的暴力方法似乎是最好的选择。

    例如,当我最近安装photoshop时,它实际上在两个不同的文件夹中给了我两个安装,一个32位版本,一个64位版本。理想情况下,当我运行安装程序向photoshop的目录添加内容时,它应该同时进入两个版本。如果我只是简单地查询某个“主注册表项”并将其填充到其中,它就不会这样做。看来,这些年来,即使是像Adobe这样的大牌也没有以一致的方式使用注册表。因此,我的安装程序工作的最好机会就是列出adobe为photoshop的安装路径所做的所有可能的注册表项,并尝试所有这些注册表项,然后自己也尝试原始目录(至少基于环境变量)。只要人们遵守标准就好了!