例如,现在我正在使用以下内容来更改我写入文件的Unix路径的几个文件:
cat file.txt | while read in; do chmod 755 "$in"; done
Run Code Online (Sandbox Code Playgroud)
有更优雅,更安全的方式吗?
我写了一个查询:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
Run Code Online (Sandbox Code Playgroud)
本地sql - 一个很长的字符串.查询未格式化.如何将字符串拆分成多行?
当我setlocal ENABLEDELAYEDEXPANSION
在cmd脚本中设置时,我有什么方法可以逃脱!我想用作命令的参数?
@echo off
setlocal ENABLEDELAYEDEXPANSION
echo I want to go out with a bang!
echo I still want to go out with a bang^!
Run Code Online (Sandbox Code Playgroud) 参数在传递给方法时是否按顺序进行评估?
对于Java来说,它总是如此,对于C来说它不是,但C#的答案是什么?
样品
string.Format("byte1={0} byte2={1} byte3={2}",
getNextByte(),
getNextByte(),
getNextByte());
int pos=0;
byte[] arr=new byte[] {1,2,3,4,5,6};
byte getNextByte()
{
return arr[pos++];
}
Run Code Online (Sandbox Code Playgroud)
这个样本有效,但它只是运气还是规则?
我正在尝试将所有反斜杠()转换为包含文件名和位置的变量中的正斜杠(/).我读过这个并看到过:
%variable:str1=str2%
Run Code Online (Sandbox Code Playgroud)
和
set "var=%var:\=/%"
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但我显然没有把它弄好.
这是我的.bat脚本的相关部分:
FOR %%f IN ("E:\myfiles\app1\data\*.csv") DO (
echo %%f
set "f=%%f:\=/%"
echo %%f
echo.
)
Run Code Online (Sandbox Code Playgroud)
输出显示每个文件名列出两次.
即这一行:
set "f=f:\=/%"
Run Code Online (Sandbox Code Playgroud)
没有做我想做的事.谁能看到我做错了什么?
假设我有以下简单的bash脚本,我想通过SLURM提交给批处理服务器:
#!/bin/bash
#SBATCH -o "outFile"$1".txt"
#SBATCH -e "errFile"$1".txt"
hostname
exit 0
Run Code Online (Sandbox Code Playgroud)
在这个脚本中,我只想写hostname
一个文本文件的输出,它的全名我通过命令行控制,如下所示:
login-2:jobs$ sbatch -D `pwd` exampleJob.sh 1
Submitted batch job 203775
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎我的最后一个命令行参数(1)没有通过sbatch解析,因为创建的文件没有我正在寻找的后缀,字符串"$ 1"按字面解释:
login-2:jobs$ ls
errFile$1.txt exampleJob.sh outFile$1.txt
Run Code Online (Sandbox Code Playgroud)
我在SO和其他地方环顾四周,但我没有运气.基本上我正在寻找的是相当于启用Torque的集群-v
中的qsub
实用程序的切换.
编辑:正如基础评论线程中所提到的,我用困难的方式解决了我的问题:我没有将一个单独的脚本多次提交给批处理服务器,每个脚本都有不同的命令行参数,我创建了一个"主脚本",简单地回显并将相同的内容重定向到不同的脚本上,每个脚本的内容都被传递的命令行参数改变.然后我将所有这些提交到我的批处理服务器sbatch
.但是,这不能回答原始问题,所以我不愿意将其添加为我的问题的答案或标记这个问题已解决.
我正在从Windows批处理文件中调用php lint,如下所示:
@echo off
for %%f in (*.php) do php -l %%f
Run Code Online (Sandbox Code Playgroud)
当文件包含语法错误时,它只输出Errors parsing xxx.php
.有没有办法让它告诉我错误的本质是什么,它是什么线?也许另一个开关?
我需要一次性在数据库中插入数千条记录.我在我的应用程序中使用spring JDBC模板.
下面是我到目前为止编写的代码,它一次执行所有插入.所以,如果我有10,000个用户,他们一次插入.但我想要的是批量执行它们,例如一批500条记录,等等.
@Override
public void saveBatch(final List<Employee> employeeList) {
final int batchSize = 500;
getJdbcTemplate().batchUpdate(QUERY_SAVE,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
Employee employee = employeeList.get(i);
ps.setString(1, employee.getFirstname());
ps.setString(2, employee.getLastname());
ps.setString(3, employee.getEmployeeIdOnSourceSystem());
}
@Override
public int getBatchSize() {
return employeeList.size();
}
});
}
Run Code Online (Sandbox Code Playgroud)
如何更改上面的代码,以便代替employeeList.size()作为批量大小,我们可以将批量大小称为500,执行它们然后下一个500,依此类推?
请帮忙.
正如在另一个线程中所讨论的如何避免cmd.exe解释shell特殊字符,如<> ^ 从命令行获取所有参数并不容易.
一个简单的
set var=%1
set "var=%~1"
Run Code Online (Sandbox Code Playgroud)
如果你有这样的要求,还不够
myBatch.bat abc"&"^&def
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,但它需要一个临时文件,它也不是防弹.
@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
@echo on
for %%a in (4) do (
rem #%1#
)
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
Run Code Online (Sandbox Code Playgroud)
它失败了像myBatch.bat%a,它显示4而不是%a
在这种情况下,简单的回声%1将起作用.
这显然是for循环,但我不知道如何改变它.
也许存在另一个简单的解决方案
我不需要这个来解决实际问题,但我喜欢在每种情况下都是防弹的解决方案,而不仅仅是在大多数情况下.
我有一个常见的.bat文件,它读取status.xml文件并找出状态字段的值.然后,其他批处理文件调用此批处理文件以查找状态值.调用批处理文件将文件名发送到公共bat文件.我无法将状态从公共批处理文件发送到调用批处理文件.有人可以帮忙吗?
main batch file
-- will call the common bat file and send the file name and a variable as arguments
setlocal
call Common.bat c:\folderdir\files\status.xml val1
-- trying to print the status returned by the common bat file
echo [%val1%]
common batch file
@ECHO off
setlocal EnableDelayedExpansion
rem will loop through the file and read the value of the status tag
(for /F "delims=" %%a in (%1) do (
set "line=%%a"
set "newLine=!line:<Interface_status>=!"
set "newLine=!newLine:</Interface_status>=!"
if "!newLine!" neq "!line!" ( …
Run Code Online (Sandbox Code Playgroud)