2013-05-02 13 views
5

Windowsバッチスクリプト内からGUIベースの保存ファイルをダイアログとして取得しようとしています。保存ボタン&のキャンセルボタンの左側に新しいフォルダボタンがあります。定義済みのファイルタイプはありません。したがって、おそらくすべてのファイルに設定する必要があります。PowerShell/C#を使用したファイルの保存ダイアログ(cmdバッチから)

これに似た何か:Save Dialog

(左上のボタンを無視する)

私はここに、ファイルを開くために、トップの答えから、素敵なsoloutionを発見した: File/folder chooser dialog from a Windows batch script

ダイアログとして保存するのに似たような解決策があるといいでしょう。最も重要なのは、パス&のファイル名を独自の変数に設定できることです。この例の目的または目的のために。 "Hello World"を出力として挿入できます。

exempliグレーシア:

echo Hello World > %variable.path%%variable.file% 

次の例では、リンクされた記事からの直接の引用です。

:: chooser.bat 
:: launches a File... Open sort of file chooser and outputs choice to the console 

@echo off 
setlocal enabledelayedexpansion 

:: Does powershell.exe exist within %PATH%? 
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
set chooser=powershell "Add-Type -AssemblyName System.windows.forms|Out-Null;$f=New- Object System.Windows.Forms.OpenFileDialog;$f.InitialDirectory='%cd%';$f.Filter='Text Files  (*.txt)|*.txt|All Files (*.*)|*.*';$f.showHelp=$true;$f.ShowDialog()|Out-Null;$f.FileName" 
) else (
rem :: If not, compose and link C# application to open file browser dialog 
set chooser=%temp%\chooser.exe 
>"%temp%\c.cs" echo using System;using System.Windows.Forms; 
>>"%temp%\c.cs" echo class dummy{ 
>>"%temp%\c.cs" echo public static void Main^(^){ 
>>"%temp%\c.cs" echo OpenFileDialog f=new OpenFileDialog^(^); 
>>"%temp%\c.cs" echo f.InitialDirectory=Environment.CurrentDirectory; 
>>"%temp%\c.cs" echo f.Filter="Text Files (*.txt)|*.txt|All Files (*.*)|*.*"; 
>>"%temp%\c.cs" echo f.ShowHelp=true; 
>>"%temp%\c.cs" echo f.ShowDialog^(^); 
>>"%temp%\c.cs" echo Console.Write^(f.FileName^);}} 
for /f "delims=" %%I in ('dir /b /s "%windir%\microsoft.net\*csc.exe"') do (
    if not exist "!chooser!" "%%I" /nologo /out:"!chooser!" "%temp%\c.cs" 2>NUL 
) 
del "%temp%\c.cs" 
if not exist "!chooser!" (
    echo Error: Please install .NET 2.0 or newer, or install PowerShell. 
    goto :EOF 
) 
) 

:: capture choice to a variable 
for /f "delims=" %%I in ('%chooser%') do set "filename=%%I" 

echo You chose %filename% 

:: Clean up the mess 
del "%temp%\chooser.exe" 2>NUL 
    goto :EOF 

enter image description here

私は名前を付けて保存のために働くために、上記の例を適応させることを試みました。しかし、私はそうするために十分に理解していません。そのため、私はバッチスクリプトを使用しており、最初は高機能のプログラミング言語ではありません。

上記のことは、PowerShellが存在する場合、またはPowerShellが存在する場合はそれを呼び出すWindowsバッチスクリプトであることを理解しています。私は、既存のコードを存在させない場合、代わりに使用するようにします。別の方法としては、ユーザーが完全なパスを手動で入力するだけです。

echo Set path to file: 
echo Path and file cannot contain any spaces. e.g. c:\folder_name\file.ext 
echo Be sure you include the filename. 
SET /P path1=">"? 
cls 
echo path set to: %path1% 
pause 
cls 
goto :eof 

私は既存の投稿を尋ねたでしょう。しかし、それはサイトのルールでは許されません。だから私は別に尋ねた。助けや洞察力は大歓迎です。

ありがとうございました&努力してください。

答えて

0

私はそれが自分自身で機能するように管理しました。ボタンなしで、私は新しいフォルダを作ってみたいです。右クリックにはさらに多くのステップが必要です&マウスを強制的に使用します。ボタンがALT + Nで呼び出すためにプログラムできる場所。それにもかかわらず、私は基本的に私が最初に求めた結果のコードを持っています。

:: chooser.bat 
:: launches a save file dialog and outputs choice to the console 
@echo off 
setlocal enabledelayedexpansion 

:: Does powershell.exe exist within %PATH%? 
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
    set chooser=powershell "Add-Type -AssemblyName System.windows.forms|Out-Null;$f=New-Object System.Windows.Forms.SaveFileDialog;$f.InitialDirectory='%cd%';$f.Filter='All Files (*.*)|*.*';$f.showHelp=$true;$f.ShowDialog()|Out-Null;$f.FileName" 
) else (
rem :: If not, compose and link C# application to open file browser dialog 
    set chooser=%temp%\chooser.exe 
    >"%temp%\c.cs" echo using System;using System.Windows.Forms; 
    >>"%temp%\c.cs" echo class dummy{ 
    >>"%temp%\c.cs" echo public static void Main^(^){ 
    >>"%temp%\c.cs" echo SaveFileDialog f=new SaveFileDialog^(^); 
    >>"%temp%\c.cs" echo f.InitialDirectory=Environment.CurrentDirectory; 
    >>"%temp%\c.cs" echo f.Filter="All Files (*.*)|*.*"; 
    >>"%temp%\c.cs" echo f.ShowHelp=true; 
    >>"%temp%\c.cs" echo f.ShowDialog^(^); 
    >>"%temp%\c.cs" echo Console.Write^(f.FileName^);}} 
    for /f "delims=" %%I in ('dir /b /s "%windir%\microsoft.net\*csc.exe"') do (
     if not exist "!chooser!" "%%I" /nologo /out:"!chooser!" "%temp%\c.cs" 2>NUL 
    ) 
    del "%temp%\c.cs" 
    if not exist "!chooser!" (
     echo Error: Please install .NET 2.0 or newer, or install PowerShell. 
     goto :EOF 
    ) 
) 

:: capture choice to a variable 
for /f "delims=" %%I in ('%chooser%') do set "filename=%%I" 

echo You chose %filename% 
pause 

:: Clean up the mess 
del "%temp%\chooser.exe" 2>NUL 
goto :EOF 

Save Dialog

+0

私の解決策は短く、私は2つの質問があります:なぜPowerShellコードをCMDコードにカプセル化するのですか? PowerShellでC#をインライン(Add-Type)だけで使用する場合や、C#を使用しないで.NETクラスを使用する場合はなぜですか? – JPBlanc

+0

これは、Windowsバッチスクリプトの.batファイルでダイアログを開くことを目的としています。私はバウチャーではなく、パワーシェルの状態に変わったのではない。私の結果は、私が見つけたコードのほぼ完全なコピーです。だからC#のビットです。私は本当にわからない。しかし、私は第二の機能的な代替手段があるのが好きです。 – Terus

5

ここでは、Windowsフォーム(SaveFileDialog Class)を使用した例を示します。

Rq:ファイルパネルを右クリックするだけで新しいディレクトリを作成するためのボタンは必要ありません。

Clear-Host 
Add-Type -AssemblyName system.Windows.Forms 
$saveFile = New-Object System.Windows.Forms.SaveFileDialog 

$saveFile.Filter = "All files (*.*)|*.*" 
$saveFile.FilterIndex = 2 
$saveFile.RestoreDirectory = $true 

$rc = $saveFile.ShowDialog() 
if ($rc -eq [System.Windows.Forms.DialogResult]::OK) 
{ 
    $saveFile.FileName 
    [System.Windows.Forms.MessageBox]::Show("You can save $($saveFile.FileName)", "Ok") 
} 

注意してください、メッセージボックスが、それは大丈夫だと、Windowsの最上部に表示されません。

+0

おかげで、それを感謝しています。私はすでに自分で働いている。私は近い将来C#に移行すると思います。バッチは、ほぼすべての方法のための方法についての一時的なラウンドを必要とするようです。 – Terus

関連する問題