And*_*iff 4 batch-file set environment-variables post-build-event visual-studio-2008
在VS2008中创建Post-Build事件时,我想检查xcopy操作的目标是否不是只读的.我找到了一些代码(http://forums.techguy.org/dos-other/842311-solved-checking-if-file-folder.html),它使用了一个临时变量,后来检查了某些属性.这是行不通的.当我手动打印变量时,它似乎是空的.
if $(PlatformName)==x86 (
echo x86
For /F "Delims=" %%I In ('Attrib $(ProjectDir)..\..\somedir\$(ConfigurationName) \somemoredir\$(TargetName).dll') Do Set _Attribs=%%I
If NOT "%_Attribs:~5,1%"=="R" (
set test="monkey"
echo %test%
echo $(test)
echo nono
echo %_Attribs%
echo $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\$(TargetName).dll
attrib $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\$(TargetName).dll
xcopy /Y $(ProjectDir)..\..\..\Runtime\bin\$(TargetName).* $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\
)
Run Code Online (Sandbox Code Playgroud)
)
输出是:
x86 ECHO已开启.ECHO正在开启.nono ECHO开启了.
然后是attrib消息等等.
echo%test%,echo $(test)等似乎表明测试变量不包含任何内容.
我如何使用环境变量?
(BTW,_Attribs,我真的很感兴趣,也没有任何东西.)
dbe*_*ham 12
批处理新手有一个经典问题 - 您无法查看刚刚在循环(括号)中设置的值,因为整个循环会立即被解析.所以你在循环执行之前就看到了变量的值 - 显然不会起作用.解决方案是SETLOCAL EnableDelayedExpansion使用延迟扩展启用延迟扩展,然后使用延迟扩展扩展您的变量!var!.
您关于如何获取文件属性的另一个问题 - 您可以使用~aFOR变量扩展修饰符来获取属性列表.在典型的Microsoft方式中,属性未与ATTRIBUTES命令以相同的顺序或大小写列出.只读标志r位于第2个字符(位置1).
文档中说明了延迟扩展和修改器:只需键入HELP FOR或FOR /?从Windows命令行输入.只需CMD从"开始"菜单运行即可获得命令行.
setlocal enableDelayedExpansion
if $(PlatformName)==x86 (
echo x86
for %%F In ("Attrib $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\$(TargetName).dll") do set _Attribs=%%~aF
if not "!_Attribs:~1,1!"=="r" (
set test="monkey"
echo !test!
echo $(test)
echo nono
echo !_Attribs!
echo $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\$(TargetName).dll
attrib $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\$(TargetName).dll
xcopy /Y $(ProjectDir)..\..\..\Runtime\bin\$(TargetName).* $(ProjectDir)..\..\somedir\$(ConfigurationName)\somemoredir\
)
)
Run Code Online (Sandbox Code Playgroud)
您可以像在原始命令中一样使用ATTRIB命令 - 只需确保使用!_Attribs:~5,1!而不是%_Attribs:~5,1%.但是~a我提供的修改器解决方案更有效,因为它使用简单的FOR循环而不必使用FOR/F执行命令.
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |