Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java powershell为每个文件生成一个要执行的字符串_Java_String_Powershell_Foreach_Filenames - Fatal编程技术网

Java powershell为每个文件生成一个要执行的字符串

Java powershell为每个文件生成一个要执行的字符串,java,string,powershell,foreach,filenames,Java,String,Powershell,Foreach,Filenames,我需要安排一个windows作业来循环数千个文件,并使用命令选项、文件名和扩展名执行命令 这些文件在目录c:\proj中的扩展名为*.xls。例如,其中一个文件是myImportantFile0001.xls,我将在powershell中手动执行以下操作: PS> java.exe -classpath "C:\PROGRA~2\my1.0.2\lib/*" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth

我需要安排一个windows作业来循环数千个文件,并使用命令选项、文件名和扩展名执行命令

这些文件在目录c:\proj中的扩展名为*.xls。例如,其中一个文件是myImportantFile0001.xls,我将在powershell中手动执行以下操作:

PS> java.exe -classpath  "C:\PROGRA~2\my1.0.2\lib/*" com.my.madsci  -v --collector-url https://api.fun.my.com/ --oauth-url  https://api.my.com/oauth/access    --type   /fileName:string/discovery:string  --key  /fileName:"myImportantFile0001/discovery:discovery" "C:\proj\myImportantFile0001_xls.txt"
我遇到的两个问题是:

命令本身有双引号,
需要找到并转换文件名和扩展名
在powershell中执行java


那么,我如何循环遍历数千个文件来构建一个字符串以使用powershell执行命令呢?

下面的脚本对您有帮助吗?我想这只是一种组合

$Commands = ls C:\Temp\*.xlsx | %{
"java.exe -classpath `"C:\PROGRA~2\my1.0.2\lib/*`" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth-url https://api.my.com/oauth/access --type /fileName:string/discovery:string --key /fileName:`"$($_.BaseName)/discovery:discovery`" `"C:\proj\$($_.BaseName)_xls.txt`""
}

$Commands

exit # remove the line if you want to execute

$Commands | %{
& $_
}

下面的脚本对您有帮助吗?我想这只是一种组合

$Commands = ls C:\Temp\*.xlsx | %{
"java.exe -classpath `"C:\PROGRA~2\my1.0.2\lib/*`" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth-url https://api.my.com/oauth/access --type /fileName:string/discovery:string --key /fileName:`"$($_.BaseName)/discovery:discovery`" `"C:\proj\$($_.BaseName)_xls.txt`""
}

$Commands

exit # remove the line if you want to execute

$Commands | %{
& $_
}
那怎么办

PS> ls C:\Temp\*.xlsx | foreach-object {  
    "java.exe -classpath `"C:\PROGRA~2\my1.0.2\lib/*`" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth-url https://api.my.com/oauth/access --type /fileName:string/discovery:string --key /fileName:`"$($_.name)/discovery:discovery`" `"C:\proj\$($_.name)_xls.txt`""
}
那怎么办

PS> ls C:\Temp\*.xlsx | foreach-object {  
    "java.exe -classpath `"C:\PROGRA~2\my1.0.2\lib/*`" com.my.madsci -v --collector-url https://api.fun.my.com/ --oauth-url https://api.my.com/oauth/access --type /fileName:string/discovery:string --key /fileName:`"$($_.name)/discovery:discovery`" `"C:\proj\$($_.name)_xls.txt`""
}

您可以这样做:

$files = Get-ChildItem "C:\temp" -Filter "*.xls"
foreach ($file in $files) 
{
    $command = "java.exe -classpath  ""C:\PROGRA~2\my1.0.2\lib/*"" com.my.madsci  "
    $command = $command + "-v --collector-url https://api.fun.my.com/ "
    $command = $command + "--oauth-url  https://api.my.com/oauth/access    "
    $command = $command + "--type   /fileName:string/discovery:string  "
    $command = $command + ("--key  /fileName:""{0}/discovery:discovery"" " -f $file.BaseName)
    $command = $command + ("""C:\proj\{0}_xls.txt""" -f $file.BaseName)
    Invoke-Expression $command
}

您可以这样做:

$files = Get-ChildItem "C:\temp" -Filter "*.xls"
foreach ($file in $files) 
{
    $command = "java.exe -classpath  ""C:\PROGRA~2\my1.0.2\lib/*"" com.my.madsci  "
    $command = $command + "-v --collector-url https://api.fun.my.com/ "
    $command = $command + "--oauth-url  https://api.my.com/oauth/access    "
    $command = $command + "--type   /fileName:string/discovery:string  "
    $command = $command + ("--key  /fileName:""{0}/discovery:discovery"" " -f $file.BaseName)
    $command = $command + ("""C:\proj\{0}_xls.txt""" -f $file.BaseName)
    Invoke-Expression $command
}

此外,您还可以从powershell本身进行计划(与PS 3.0及更高版本一起使用)


此外,您还可以从powershell本身进行计划(与PS 3.0及更高版本一起使用)


谢谢嗯,ls可以工作,但不能,因为fileName部分仍然具有文件的扩展名。这是需要删除的。谢谢。嗯,ls可以工作,但不能,因为fileName部分仍然具有文件的扩展名。我喜欢你的编程风格。阅读和理解是一种乐趣。是的,您的代码和“$file.BaseName”很难找到。对于使用操作系统相关自动化的powershell初学者,您会推荐哪本书/资源?谢谢工作狂,现在脸红:-)。对于绝对初学者来说,一本很好的入门书是《在一个月的午餐中学习Windows PowerShell 3》,这里可以找到更多关于好书的参考资料:。我喜欢你的编程风格。阅读和理解是一种乐趣。是的,您的代码和“$file.BaseName”很难找到。对于使用操作系统相关自动化的powershell初学者,您会推荐哪本书/资源?谢谢工作狂,现在脸红:-)。对于绝对初学者来说,一个很好的起点是《在一个月的午餐中学习Windows PowerShell 3》,这里可以找到更多关于好书的参考资料:。