我正在编写一个批处理文件,开始时很简单的事情已经开始像滚雪球一样变成一个更大的项目。我学得越多,我就越想实现。所以我的脚本的基础是我希望它能够自动执行多个 SD 卡的格式化和文件复制过程以及在 2 种不同格式之间进行选择的能力。公平警告:其中一些命令是来自 this genius 的第三方软件(我的意思是恭敬地)。这是我到目前为止的想法:
@echo off
REM Set the variables below for the file path for the bin file and the drive letters for the sd cards.
SET BIN_PATH=
SET SD1=
SET SD2=
:start
Title Insert SD Cards
cls
echo.
echo.
echo.
echo.
echo Insert SD cards into the readers.
echo.
echo.
echo.
echo.
pause
:ListDrives
Title Drives present?
restartsrdev %SD1%:
restartsrdev %SD2%:
cls
sleep 1
ECHO.
ECHO.
ECHO Are drives %SD1% and/or %SD2% listed below?
ECHO.
ECHO.
wmic logicaldisk get description,name
ECHO.
ECHO.
ECHO (Y) YES
ECHO (N) NO
set choice=
set /p choice=
if not '%choice%'=='' set choice=%choice:~0,99%
if '%choice%'=='Y' goto FormatChoice
if '%choice%'=='y' goto FormatChoice
if '%choice%'=='N' goto Reseat
if '%choice%'=='n' goto Reseat
ECHO "%choice%" is not valid, try again
Pause.
GoTo ListDrives
:FormatChoice
Title FS Preferance
cls
echo.
echo.
echo Format to EXT4 or FAT32?
echo.
echo.
echo.
ECHO (1) FAT32
ECHO (2) EXT4
set choice=
set /p choice=
if not '%choice%'=='' set choice=%choice:~0,99%
if '%choice%'=='1' goto FormatFAT32
if '%choice%'=='2' goto FormatEXT4
ECHO "%choice%" is not valid, try again
Pause.
GoTo FormatChoice
:FormatEXT4
Title Formatting SD Cards to EXT4
cls
echo.
mke2fs -t ext4 -L Label %SD1%:
echo.
echo.
mke2fs -t ext4 -L Label %SD2%:
echo.
echo.
start "Copying BIN to %SD1%:" cmd /c Robocopy %BIN_PATH% %SD1%:\ /e
start "Copying BIN to %SD2%:" cmd /c Robocopy %BIN_PATH% %SD2%:\ /e
echo.
echo.
pause
removedrive %SD1%: -l -47 -e
echo.
removedrive %SD2%: -l -47 -e
GoTo Choose
:FormatFAT32
Title Formatting SD Cards to FAT32
cls
echo.
echo.
echo.
format %SD1%: /fs:FAT32 /V:"" /Q /X
echo.
echo.
echo.
format %SD2%: /fs:FAT32 /V:"" /Q /X
echo.
echo.
echo.
start "Copying BIN to %SD1%:" cmd /c Robocopy %BIN_PATH% %SD1%:\ /e
start "Copying BIN to %SD2%:" cmd /c Robocopy %BIN_PATH% %SD2%:\ /e
echo.
cls
echo.
:Choose
cls
Title Transfer Complete
echo.
echo.
echo.
echo.
echo Please remove the SD cards from the readers.
echo.
echo Want to do it again?
ECHO.
ECHO (1) Format again
ECHO (2) Exit
ECHO.
set choice=
set /p choice=
if not '%choice%'=='' set choice=%choice:~0,99%
if '%choice%'=='1' goto start
if '%choice%'=='2' goto Exit
ECHO "%choice%" is not valid, try again
ECHO.
pause.
goto choose
:Exit
Exit
:Reseat
Title Reseat SD Cards
cls
echo.
echo.
echo.
echo.
echo Reseat the SD cards in the readers or
echo turn the USB hub off/on
echo.
echo.
echo.
pause
GoTo ListDrives
我的问题是我希望能够从这部分代码分配发现的驱动器号:
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
SET SD1=%%i
SET SD2=%%i
)
)
ECHO Are drives %SD1% and/or %SD2% listed below?
pause
我的变量 SD1 和 SD2。一次插入的 SD 卡读卡器永远不会超过两个,所以这不是问题。 任何形式的见解将不胜感激。我做了很多研究,如果这是一个简单的修复,我深表歉意,但我在这里撞墙了。
更新: 这是最终脚本的样子,以防有人感兴趣...
@echo off
:start
Title Insert SD Cards
cls
echo.
echo.
echo.
echo.
echo Insert SD cards into the readers.
echo.
echo.
echo.
echo.
pause
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i
) ELSE (
set SD2=%%i
)
)
)
cls
:ListDrives
Title Drives present?
cls
sleep 1
ECHO.
ECHO.
ECHO Are drives %SD1% and/or %SD2% listed below?
ECHO.
ECHO.
wmic logicaldisk get description,name
ECHO.
ECHO.
ECHO (Y) YES
ECHO (N) NO
set choice=
set /p choice=
if not '%choice%'=='' set choice=%choice:~0,99%
if '%choice%'=='Y' goto FormatChoice
if '%choice%'=='y' goto FormatChoice
if '%choice%'=='N' goto Reseat
if '%choice%'=='n' goto Reseat
ECHO "%choice%" is not valid, try again
Pause.
GoTo ListDrives
:FormatChoice
Title FS Preferance
cls
echo.
echo.
echo Format to EXT4 or FAT32?
echo.
echo.
echo.
ECHO (1) FAT32
ECHO (2) EXT4
set choice=
set /p choice=
if not '%choice%'=='' set choice=%choice:~0,99%
if '%choice%'=='1' goto FormatFAT32
if '%choice%'=='2' goto FormatEXT4
ECHO "%choice%" is not valid, try again
Pause.
GoTo FormatChoice
:FormatEXT4
Title Formatting SD Cards to EXT4
FOR /F "tokens=1" %%I in (BIN_PATH.TXT) do SET BIN_PATH=%%I
FOR /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i
) ELSE (
set SD2=%%i
)
)
)
cls
echo.
mke2fs -t ext4 -L Label %SD1%
echo.
echo.
mke2fs -t ext4 -L Label %SD2%
echo.
echo.
start "Copying BIN to %SD1%" cmd /c Robocopy %BIN_PATH% %SD1%\ /e
start "Copying BIN to %SD2%" cmd /c Robocopy %BIN_PATH% %SD2%\ /e
echo.
echo.
pause
removedrive %SD1% -L -47 -e -i
echo.
removedrive %SD2% -L -47 -e -i
GoTo Choose
:FormatFAT32
FOR /F "tokens=1" %%I in (BIN_PATH.TXT) do SET BIN_PATH=%%I
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i
) ELSE (
set SD2=%%i
)
)
)
Title Formatting SD Cards to FAT32
cls
echo.
echo.
echo.
format %SD1% /fs:FAT32 /V:"" /Q /X
echo.
echo.
echo.
format %SD2% /fs:FAT32 /V:"" /Q /X
echo.
echo.
echo.
start "Copying BIN to %SD1%" cmd /c Robocopy %BIN_PATH% %SD1%\ /e
start "Copying BIN to %SD2%" cmd /c Robocopy %BIN_PATH% %SD2%\ /e
echo.
cls
:Choose
cls
Title Transfer Complete
echo.
echo.
echo.
echo.
echo Please remove the SD cards from the readers.
echo.
echo Want to do it again?
ECHO.
ECHO (1) Format again
ECHO (2) Exit
ECHO.
set choice=
set /p choice=
if not '%choice%'=='' set choice=%choice:~0,99%
if '%choice%'=='1' goto start
if '%choice%'=='2' goto Exit
ECHO "%choice%" is not valid, try again
ECHO.
pause.
goto choose
:Exit
Exit
:Reseat
Title Reseat SD Cards
cls
echo.
echo.
echo.
echo.
echo Reseat the SD cards in the readers or
echo turn the USB hub off/on
echo.
echo.
echo.
pause
GoTo ListDrives
最佳答案
既然你说插入的永远不会超过两个,你可以使用另一个 IF 语句
set SD1=
set SD2=
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
IF NOT DEFINED SD1 (
set SD1=%%i
) ELSE (
set SD2=%%i
)
)
)
参见 http://ss64.com/nt/if.html有关 IF 语句的信息
关于windows - 为变量分配多个驱动器号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41614780/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R