1

I did try this test.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\audio\shell\ChunkAudio]@="chunk audio (5 min)""Icon"="%SystemRoot%\\System32\\shell32.dll,186"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\audio\shell\ChunkAudio\Command]@="%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\Users\Me\Desktop\5min_chunk_audio.ps1 %1"

It adds a context menu on the audio files as expected, but it sends an error when I click on it:

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.

It might be because the test.reg doesn't add anything to the field "Data" in ....shell\ChunkAudio\Command in the registry. (I tried to manualy add the %SystemRoot%\system32\... C:\...audio.ps1 %1)

I also tried:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\audio\shell\ChunkAudio\Command]
@="CMD.EXE /C Powershell.exe -File C:\\Users\\Me\Desktop\\petit_program\\PowerShell\\PowerShell_script\\5min_chunk_audio.ps1 %1"
J. Does
  • 149
  • 6

2 Answers2

1

Try to formulate the command like this:

@="CMD.EXE /C Powershell.exe -File C:\\Users\\Me\\Desktop\\5min_chunk_audio.ps1 %1"
harrymc
  • 455,459
  • 31
  • 526
  • 924
  • It works, but it's weird that to run the powershell you need first to run the cmd to launch it (if i understand your code correctly) – J. Does Dec 27 '18 at 14:55
  • And is there a way to run it silently on the background? (Without the cmd windows?) – J. Does Dec 27 '18 at 14:56
  • 1
    You may try it without CMD and it might even work. But with CMD you can also use [this answer](https://superuser.com/a/62646/8672). – harrymc Dec 27 '18 at 15:03
  • if you get an error `Cannot process argument because the value of argument "name" is not valid. Change the value of the "name" etc.` it's because of the space isinde the selected file name. – J. Does Dec 27 '18 at 20:54
  • by the way it also works without the CMD.EXE /C (and re-by the way: use /k instead if you want the cmd windows to stay open) – J. Does Dec 28 '18 at 08:43
0

To complete harrymc's answer:

Windows Registry Editor Version 5.00

; set the name + icon in the context menu
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\audio\shell\ChunkAudio]
@="chunk audio"
"Icon"="%SystemRoot%\\System32\\shell32.dll,117"

; run the script
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\audio\shell\ChunkAudio\Command]
    @="CMD.EXE /K Powershell.exe -File C:\\Users\\Me\\Desktop\\5min_chunk_audio.ps1 \"%1\""

● CMD.EXE /C Carries out the command specified by string and then terminates

CMD.EXE /K Carries out the command specified by string but remains (good to debug)

type cmd /? in a cmd windows to find more args.

%1 is the first argument (%2 the second...). %1 contains the path of the file. We need to quote the arg to use it (otherwhise the path will be cut at the first space). But "%1" won't work because we need to escape the quote, so we write \"%1\".


Bonus: To get the arg (the path) on your script simply use $arg (it's an "Automatic Variables". To know more run: Get-Help about_Automatic_Variables)

J. Does
  • 149
  • 6