Windows 从UNC拖放到批处理文件-如何捕获%cd%

Windows 从UNC拖放到批处理文件-如何捕获%cd%,windows,batch-file,Windows,Batch File,我有一个批处理文件: @ECHO OFF Set dd=%DATE:~0,2% Set mm=%DATE:~3,2% Set yyyy=%DATE:~6,4% Set hh=%TIME:~0,2% Set ii=%TIME:~3,2% Set ss=%TIME:~6,2% Set zipFileHandle=%yyyy%-%mm%-%dd%-%hh%-%ii%-%ss% Set files=%* %~dp0\7za a -t7z %cd%\%zipFileHandle%.7z %files%

我有一个批处理文件:

@ECHO OFF
Set dd=%DATE:~0,2%
Set mm=%DATE:~3,2%
Set yyyy=%DATE:~6,4%
Set hh=%TIME:~0,2%
Set ii=%TIME:~3,2%
Set ss=%TIME:~6,2%
Set zipFileHandle=%yyyy%-%mm%-%dd%-%hh%-%ii%-%ss%
Set files=%*

%~dp0\7za a -t7z %cd%\%zipFileHandle%.7z %files%
当我将一组文件和/或目录放在上面时,它会将它们压缩到根文件夹中的一个有日期的.7z文件中,这些文件都来自根文件夹

问题是,如果我删除路径以
\\
开头的网络文件,批处理文件会将保存目录的值更改为
C:\Windows

在将
更改为系统根目录之前,如何获取
%cd%
的值


如果不可能,是否可以从变量
%files%
获取公共根文件夹?

您应该会收到下一条消息:

'\\computer\path'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.
因此,您可以使用下一步:

%~dp07za a -t7z %~dp1%zipFileHandle%.7z %files%
请注意,
\
可以使用
%~dp0
%~dp1
忽略反斜杠,因为
~dp
修饰符将%变量扩展为仅包含尾部
\
反斜杠的路径

如果源文件夹名称包含空格,请使用带引号的目标文件名,而不是:

%~dp07za a -t7z "%~dp1%zipFileHandle%.7z" %files%

在调用
7za
之前,您可以
pushd%~dp1
。将第一个拖放文件的UNC路径临时映射为网络驱动器号,并将目录更改为网络驱动器号。一旦脚本存在,映射就会消失

此外,7za还提供了可用于容错的功能

@echo off
setlocal

for /f "tokens=2 delims=.=" %%I in (
    'wmic os get localdatetime /format:list ^| find "="'
) do set "t=%%I"

set "handle=%t:~0,4%-%t:~4,2%-%t:~6,2%_%t:~8,2%-%t:~10,2%-%t:~12,2%"

pushd "%~dp1"

"%~dp0\7za" a -t7z "%handle%.7z" %* || (
    if ERRORLEVEL 2 (
        echo Zipping failed.
        pause
    ) else (
        echo Zipping completed with errors, possibly because a file is locked by another process.
        pause
    )
)

谢谢rojo-这是可行的,但我更高兴的是解决方案只是一行的变化:-)