我需要在Windows批处理文件中编写一些代码.
这个脚本的兴趣部分应该建立一个文件夹,如果该文件夹尚不存在,但是,如果此文件夹已经存在,它应该不覆盖的内容.
我试过这样的事情:
if not exist %USERPROFILE%\.qgis-custom (
mkdir %USERPROFILE%\.qgis-custom
xcopy %OSGEO4W_ROOT%\qgisconfig %USERPROFILE%\.qgis-custom /s /v /e
)
Run Code Online (Sandbox Code Playgroud)
但我不确定我是否正确行事.
谢谢
MC *_* ND 18
if not exist "%USERPROFILE%\.qgis-custom\" (
mkdir "%USERPROFILE%\.qgis-custom" 2>nul
if not errorlevel 1 (
xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e
)
)
Run Code Online (Sandbox Code Playgroud)
你差不多完成了.逻辑是正确的,只是一些小的变化.
此代码检查文件夹是否存在(请参阅结束反斜杠,只是为了区分文件夹与具有相同名称的文件).
如果它不存在,则创建它并检查创建状态.如果存在具有相同名称的文件,或者您无权创建该文件夹,则该文件将失败.
如果一切正常,则复制文件.
引用所有路径以避免空格问题.
它可以简化(只需更少的代码,但并不意味着它更好).另一种选择是始终尝试创建文件夹.如果没有错误,则复制文件
mkdir "%USERPROFILE%\.qgis-custom" 2>nul
if not errorlevel 1 (
xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e
)
Run Code Online (Sandbox Code Playgroud)
在两个代码示例中,如果在脚本执行期间未创建文件夹,则不会复制文件.
编辑 - 正如dbenham评论,相同的代码可以写成一行
md "%USERPROFILE%\.qgis-custom" 2>nul && xcopy "%OSGEO4W_ROOT%\qgisconfig" "%USERPROFILE%\.qgis-custom" /s /v /e
Run Code Online (Sandbox Code Playgroud)
&&只有在前一个命令没有设置errorlevel时才会执行代码.如果mkdir失败,xcopy则不执行.
小智 8
测试目录时请记住,每个目录都包含两个特殊文件。
一种称为“.”。和另一个 '..'
。是目录自己的名称,而..是其父目录的名称。
为了避免尾随反斜杠问题,只需测试目录是否知道它自己的名称。
例如:
if not exist %temp%\buffer\. mkdir %temp%\buffer
Run Code Online (Sandbox Code Playgroud)