小编asc*_*pfl的帖子

"Droplet"批处理脚本 - 包含&符号的文件名

我正在尝试创建一个可以将其他文件放到其上的批处理文件.具体来说,我正在使用ffmpeg来编辑手持录音机产生的音频文件.问题是当使用带有&符号的文件名时(&).即使在引用输入时,&之后的任何内容都会被删除,但只有当文件被丢弃时才会被删除; 如果在命令行输入文件名输入,则脚本可以正常工作.在cmd窗口关闭之前,我会短暂地看到文件名的其余部分,并显示一条错误消息,说明它未被识别为有效命令.

这是我的脚本:

rem Change to drive and directory of input file
%~d1
cd %~p1

rem ffmpeg: mix to one channel, double the volume
%HOMEDRIVE%%HOMEPATH%\ffmpeg.exe -i "%~nx1" -ac 1 -vol 1024 "%~n1 fixed%~x1"

pause

这是删除后命令行上显示的内容"ch17&18.mp3":

C:\Users\computergeeksjw\Desktop>C:\Users\computergeeksjw\ffmpeg.exe -i "ch17" -ac 1 -vol 1024 "ch17 fixed"
[...]
ch17: No such file or directory

如果重要:我正在使用Windows 8开发人员预览版.这会导致我的问题吗?Windows 7或更早版本是否会出现相同的错误?

windows drag-and-drop ffmpeg batch-file

7
推荐指数
1
解决办法
5139
查看次数

.cmd和.bat文件将返回代码转换为错误消息

我正在尝试通过.cmd文件自动化我使用测试套件创建的程序.

我可以通过%errorlevel%获取我运行的返回代码的程序.

我的程序对每种类型的错误都有一定的返回码.

例如:

1 - 意味着因为这样的原因而失败

2 - 由于某些其他原因意味着失败

...

echo FAILED:测试用例失败,错误级别:%errorlevel%>> TestSuite1Log.txt

相反,我想以某种方式说:

echo FAILED:测试用例失败,错误原因:lookupError(%errorlevel%)>> TestSuite1Log.txt

这是否可以使用.bat文件?或者我是否必须转向像python/perl这样的脚本语言?

build-automation cmd batch-file

6
推荐指数
1
解决办法
3万
查看次数

批量复制文件与xcopy

我在互联网上查了一些例子,但我无法让我的(第一个)批处理文件工作.我想自动将文件从一个文件夹复制到另一个文件夹,但没有任何反应.

@echo off
xcopy "C:\source\" "C:\target\" /c /d /i /y
exit
Run Code Online (Sandbox Code Playgroud)

你能看到什么问题吗?

谢谢!!

更新:我完成了巴厘岛C给出的命令,但它仍然无效.查看快照

xcopy C:\folder1 C:\folder2\folder1 /t /e /i /y
xcopy C:\folder1 C:\folder2\ /t /e /i /y
Run Code Online (Sandbox Code Playgroud)

图片:
图片

我必须用CTRL + C来阻止它.

PS:我在Win 7上

更新(解决方案):它有效!问题是名称xcopy,bat在我的桌面上,我从那里运行命令,所以它正在执行我的桌面而不是Windows的xcopy.bat文件.我不得不用"myxcopy"重命名该文件.蝙蝠":

@echo off
xcopy "C:\source" "C:\target" /c /d /i /y
exit
Run Code Online (Sandbox Code Playgroud)

xcopy batch-file

6
推荐指数
2
解决办法
17万
查看次数

我需要仅使用本机Windows命令在批处理环境变量中匹配或替换星号*.这可能吗?

我试图从环境变量字符串中删除星号,但似乎无法做到.

我正在创建一个基于搜索字符串的m3u文件,所以例如如果我想制作一个m3u文件,其中包含每个包含爱字的歌曲,我会输入:

m3u *Love*
Run Code Online (Sandbox Code Playgroud)

并且m3u.bat将创建该文件:

xLovex.m3u
Run Code Online (Sandbox Code Playgroud)

但是替换字符的常规方法不适用于星号.(虽然我对问号没有这个问题.)

set nam=%nam:*=x%.m3u
Run Code Online (Sandbox Code Playgroud)

而是创建文件名

x.m3u
Run Code Online (Sandbox Code Playgroud)

windows replace cmd batch-file

6
推荐指数
1
解决办法
5689
查看次数

在什么时候`for`或`for/R`枚举目录(树)?

该命令for可用于枚举目录并对每个项目应用(a)某些命令.对于/R完整的目录树,可以实现相同的功能.

当枚举目录(树)的内容被命令体中的for命令改变时会发生什么?

假设我们的目录D:\data包含以下内容:

file1.txt
file2.txt
file3.txt
Run Code Online (Sandbox Code Playgroud)

for %F in ("*.txt") do echo %F在所述目录中执行的输出显然将反映上面的列表.

但是,forfor正文中的命令修改目录内容时,循环的输出是什么?例如,在file3.txt实际迭代之前,列表中的一个文件被删除了吗?或者,如果file4.txt在完成循环之前创建了一个新文件,例如?

for /R在这种情况下表现如何?假定有几个子目录sub1,sub2,sub3,每个包含的文件的上述列表; for /R目前正在迭代sub2,sub1已经处理,但sub3还没有; 那个时候的内容sub1sub3改变(当前正sub2如上所述走过的时候); 那将会列举什么?我猜,内容的变化sub1不会被识别,但是怎么样sub3

最后,在命令提示符或批处理文件中执行forfor /R执行时的行为是否存在差异?不同的Windows版本有差异吗?

注意:
另请参阅我关于该命令的类似问题forfiles.

for-loop cmd batch-file

6
推荐指数
1
解决办法
391
查看次数

Windows批处理字符串替换在变量给出搜索字符串时不起作用

我破坏了一些代码,这些代码应该删除没有以值为开头的名称的文件keep.我通过将文件的名称放入tmpL1并且tmpL2在替换keep没有任何值的情况下实现此目的.如果tmpL1tmpL2不同我保留文件,否则它将被删除.

setlocal enabledelayedexpansion
set keep=[File I want to keep]
for /F %%L IN ('dir /b *') do (
    set tmpL1=%%L
    set tmpL2=!tmpL1:%keep%=!
    if !tmpL1!==!tmpL2! (
        echo.[REMOVE]
    ) else (
        echo.[KEEP]
    )
)
Run Code Online (Sandbox Code Playgroud)

这工作正常.但是,当我将此代码放在一个更大的脚本中时,设置tmpL2突然停止工作.而不是(部分)文件名tmpL2现在字面上包含tmpL1:=.

这是我想要使用它的脚本.附加的for-loops仅用于浏览目录树.脚本的主要功能仍然相同.

setlocal enabledelayedexpansion
for /F %%G in ('dir /b *-snapshots') do (
    set tmpG1=%%G
    for /F %%H in ('dir /b !tmpG1!\*') do (
        set tmpH1=%%H
        for /F …
Run Code Online (Sandbox Code Playgroud)

windows cmd batch-file

6
推荐指数
1
解决办法
77
查看次数

批处理文件和引用变量

我正在处理一个批处理文件,我想知道为什么有些变量周围有双引号而其他变量没有,例如?

SET "keePass=%USERPROFILE%\KeePass\KeePass-2.31\KeePass.exe"
Run Code Online (Sandbox Code Playgroud)

但是这个:

SET name="bob"
Run Code Online (Sandbox Code Playgroud)

为什么第一个中的双引号,而不是第二个?

windows cmd batch-file environment-variables

6
推荐指数
1
解决办法
4205
查看次数

为什么不需要`call`从管道中涉及的调用批处理脚本返回?

假设存在执行另一个批处理文件(被调用者)的批处理文件(调用者),则call需要使用该命令以便在被调用者完成执行后返回调用者.这是一个例子:

caller.bat:

echo Calling another script...
call callee.bat
echo Returned from callee...
Run Code Online (Sandbox Code Playgroud)

callee.bat(在同一地点):

echo   Being called from caller...
Run Code Online (Sandbox Code Playgroud)

输出将是这个(省略命令echos),表明执行按预期返回:

Calling another script...
  Being called from caller...
Returned from callee...
Run Code Online (Sandbox Code Playgroud)

如果call命令在调用者中被解除,则输出将为:

Calling another script...
  Being called from caller...
Run Code Online (Sandbox Code Playgroud)

但是一旦被调用者涉及管道(|),则call命令是否被使用没有区别.例如:

caller.bat(被调用者保持不变):

echo Calling another script...
break | callee.bat
echo Returned from callee...
Run Code Online (Sandbox Code Playgroud)

输出将是这个,虽然没有call命令.

Calling another script...
  Being called from caller...
Returned from callee...
Run Code Online (Sandbox Code Playgroud)

这种行为的原因是什么,导致执行返回给调用者的原因是什么?

windows cmd pipe batch-file call

6
推荐指数
1
解决办法
529
查看次数

为什么我不能按顺序重定向到两个输入流`0 <`和`3 <`?

当我尝试将多个文件重定向到多个流时,如下例所示,一切都按预期工作:

3< stream3.txt 4< stream4.txt echo/
Run Code Online (Sandbox Code Playgroud)

类似的东西也可以使用更多的流和文件以及其他命令echo/,甚至是功能代码块.即使使用保留的输出流1,2似乎也能正常工作.

但是,只要我按照给定的顺序使用以下流执行此操作:

0< stream0.txt 3< stream3.txt echo/
Run Code Online (Sandbox Code Playgroud)

托管命令提示符实例立即关闭.

当我更改流的顺序时,它再次正常工作:

3< stream3.txt 0< stream0.txt echo/
Run Code Online (Sandbox Code Playgroud)

那么,cmd当我尝试输入 - 重定向到流03按此顺序时,为什么实例意外终止?

我使用的是Windows 7(x64).


当我cmd尝试执行上述失败的输入重定向之前,我打开一个新的命令提示符实例:

cmd
0< stream0.txt 3< stream3.txt echo/
Run Code Online (Sandbox Code Playgroud)

我可以读取出现的错误消息 - 假设文本文件包含其基本名称后跟换行符:

'stream3' is not recognised as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

当我执行以下操作时,我可以看到两个文件实际上都被重定向:

cmd /V
0< stream0.txt 3< stream3.txt (set /P #="" & echo/!#!)

cmd /V
0< stream0.txt …
Run Code Online (Sandbox Code Playgroud)

windows cmd io-redirection

6
推荐指数
1
解决办法
493
查看次数

Spring Batch - 两个不同的批次可以共享同一个元数据数据源吗?

我有两个不同的 Spring Batch 项目,它们都配置为元数据表具有相同的数据源(相同的 DB 模式):

  1. application.properties(Spring Batch A)

    spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/my_batch
    
    Run Code Online (Sandbox Code Playgroud)
  2. application.properties(Spring Batch B)

    spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/my_batch
    
    Run Code Online (Sandbox Code Playgroud)


在多次成功运行 Spring Batch A 后,我运行了 Spring Batch B 并抛出了一个JobExecutionAlreadyRunningException.

例子:

org.springframework.batch.core.repository.JobExecutionAlreadyRunningException:此作业的作业执行已在运行:JobInstance: id=2, JobParameters=[{}], Job=[MyBatchName]


在此期间,Spring Batch A 不再运行。异常似乎表明 Job Instance ID 已经被 Spring Batch A 占用,不能被 Spring Batch B 使用。

题:

Spring Batch 元数据模式可以支持多个 Spring Batch 项目吗?

java spring datasource spring-batch

6
推荐指数
2
解决办法
1686
查看次数