首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果其他文件失败,批处理文件

如果其他文件失败,批处理文件
EN

Stack Overflow用户
提问于 2013-03-06 05:03:05
回答 2查看 9.4K关注 0票数 1

我配置了一个批处理文件,以检查登录的用户是否是特定用户。无论我做什么,批处理文件总是在) ELSE (行上崩溃。我花了五个小时在这上面,我确实缩小并改进了命令,但它仍然不起作用。对于如何让它开始工作,我会很感激的(而且,如果我做的非常愚蠢,请告诉我,在批处理文件方面,我有点像个傻瓜):

代码语言:javascript
复制
@ECHO OFF
::
SETLOCAL
::
IF "%USERNAME%" EQU "jdoe" (
    IMDISK -a -s 32M -m #: -p "/FS:exFAT /Q /Y /V:MERGEABLES"
    FOR /F "tokens=2 delims==" %%D IN ('WMIC LOGICALDISK WHERE "size=33538048" GET Name /format:value'^) DO (
        COPY "\\WIN2K8R2-F-01\Remote Applications\Batches\Merge PDFs.lnk" "%%D\Merge PDFs.lnk"
        GOTO End
    ^)
) ELSE (
    IMDISK -a -s 256M -m #: -p "/FS:exFAT /Q /Y /V:RAMDRIVE"
    FOR /F "tokens=2 delims==" %%D IN ('WMIC LOGICALDISK WHERE "size=268304384" GET Name /format:value'^) DO (
        COPY "\\WIN2K8R2-F-01\Remote Applications\Batches\Archive Folders.lnk" "%%D\Archive Folders.lnk"
        GOTO End
    ^)
)
::
:End
::
IF EXIST "%SystemDrive%\BGInfo.exe" (
    "%SystemDrive%\BGInfo.exe" "%SystemDrive%\BGInfo.bgi" /Timer:0 /AcceptEula /Silent
)
::
ENDLOCAL

更新

所以,我重写了我的版本,老实说,我不认为我的原始和重写之间有太大的区别,但重写起了作用。但是,最后我不能使用这个脚本,因为有一个问题是微软提供的。问题是不允许普通用户格式化驱动器。这会将IMDISK抛出窗外,现在我不得不处理隐藏的文件夹和快捷方式等等。RUNAS没有帮助,而且我也无法让它工作。我很确定我搞砸了,但我不认为有必要再去解决这个问题了。对于任何关心的人来说,这是脚本的最终版本。也许它会帮助其他人:

代码语言:javascript
复制
@ECHO OFF
::
IF /I "%USERNAME%" EQU "jdoe" (
    IMDISK -a -s 32M -m #: -p "/FS:exFAT /Q /Y /V:MERGEABLES"
::
    TIMEOUT 4
::
    FOR /F "tokens=2 delims==" %%D IN (
        'WMIC LOGICALDISK WHERE "size=33423360" GET Name /format:value'
    ) DO (
        PUSHD %%D
::
        COPY "\\WIN2K8R2-F-01\Remote Applications\Batches\Merge PDFs.lnk" "Merge PDFs.lnk"
::
        POPD
::
        GOTO End
    )
) ELSE (
    IMDISK -a -s 256M -m #: -p "/FS:exFAT /Q /Y /V:RAMDRIVE"
::
    TIMEOUT 4
::
    FOR /F "tokens=2 delims==" %%D IN (
        'WMIC LOGICALDISK WHERE "size=268304384" GET Name /format:value'
    ) DO (
        PUSHD %%D
::
        COPY "\\WIN2K8R2-F-01\Remote Applications\Batches\Archive Folders.lnk" "Archive Folders.lnk"
::
        POPD
::
        GOTO End
    )
)
::
:End
::
IF EXIST "%SystemDrive%\BGInfo.exe" (
    "%SystemDrive%\BGInfo.exe" "%SystemDrive%\BGInfo.bgi" /Timer:0 /AcceptEula /Silent
)

我无法理解的一件事是如何将%%D变量从循环直接传递给COPY命令。所以我才用PUSHDPOPD,但这感觉很脏.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-06 05:26:54

您的IF语句似乎是正确的。我用IMDISK和FOR循环进行了尝试(在Windows 7上),并对其进行了注释,它运行得很好。这是我跑的批次。

代码语言:javascript
复制
@ECHO OFF
::
SETLOCAL
::
IF "%USERNAME%" EQU "jdoe" (
    ECHO jdoe User Found
    REM IMDISK -a -s 32M -m #: -p "/FS:exFAT /Q /Y /V:MERGEABLES"
    REM FOR /F "tokens=2 delims==" %%D IN ('WMIC LOGICALDISK WHERE "size=33538048" GET Name /format:value'^) DO (
    REM     COPY "\\WIN2K8R2-F-01\Remote Applications\Batches\Merge PDFs.lnk" "%%D\Merge PDFs.lnk"
    REM     GOTO End
    REM ^)
) ELSE (
    ECHO User Not Found
    REM IMDISK -a -s 256M -m #: -p "/FS:exFAT /Q /Y /V:RAMDRIVE"
    REM FOR /F "tokens=2 delims==" %%D IN ('WMIC LOGICALDISK WHERE "size=268304384" GET Name /format:value'^) DO (
    REM     COPY "\\WIN2K8R2-F-01\Remote Applications\Batches\Archive Folders.lnk" "%%D\Archive Folders.lnk"
    REM     GOTO End
    REM ^)
)
::
:End
::
IF EXIST "%SystemDrive%\BGInfo.exe" (
    REM "%SystemDrive%\BGInfo.exe" "%SystemDrive%\BGInfo.bgi" /Timer:0 /AcceptEula /Silent
)
::
ENDLOCAL

你的IMDISK电话似乎很普通。没有发现任何错误,但我没有能力测试它。

我会仔细看看FOR循环。根据我的经验,当您将循环嵌套在其他块中时,循环是敏感的。我经常得到各种奇怪的结果。尝试将FOR循环拉到一个单独的批处理文件中,以测试它并解决任何错误。

如果您可以让FOR循环在一个单独的批处理文件中工作,但仍然不能在您的If ELSE语句中工作,请尝试设置对包含IMDISK和FOR循环语句的标签的调用。由于某些原因,使用CALL语句可以更好地处理嵌套。

下面是使用调用子例程的参考:http://www.quepublishing.com/articles/article.aspx?p=1154761&seqNum=11

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 05:24:22

如果我是你,我会删除括号前的所有插入符号。

插入符号回避了下一个字符的特殊含义--它的意思是“这个字符字面上”。

顺便说一下-你可以

代码语言:javascript
复制
for /f ... in ('whatever...') do (

作为

代码语言:javascript
复制
for /f ... in (
  'whatever...'
 ) do (

如果你愿意的话-可能会让它更容易读懂.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15239357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档